. : tmyk_h : .

何を書くかは決めていません。書きながら方向性が決まってくれば良いと考えています。

Jenkins ユーザ・カンファレンス 2015 東京に参加してきた。#jenkinsja

昨日開催された「Jenkins ユーザ・カンファレンス 2015 東京」に参加して、感じた事など。

Jenkins のテレビデビュー

アメリカのドラマ「シリコンバレー」にJenkinsの画面が登場したとの事。

Silicon Valley | Homepage | HBO

Intellij IDEAでコード書いて、Jenkinsでビルド・デプロイ処理(?)して、「ついにプロジェクトが完成した!!」様な場面だったそう。
川口さんも「これでやっと自分がどんな仕事をしているのか妻に説明できます」と仰っていたけれど、自分の関わっている(関わった)プロダクトの成果を家族に「ほら、あれだよ。」って言えるのってとても素晴らしいことだと思うし、自分もそうなれると良いなと感じた。

Jenkins Workflow plugin

Workflow plugin is 1.0 | Jenkins CI

Jenkinsを作成した当初は「何か一つを自動化したい」という思いがあったそうだが、それが実現されると「色々自動化したい」という流れになり、「自動化した物同士を繋ぎたい」というパイプライン的な利用方法が増えてきたことにより、「複雑な活動の指揮をしたい」という思いからWorkflow pluginが生まれたとのこと。
レゴのような、形がきっちり決まっているものよりも、粘土のような、なんでもくっつく組み合わせができる事を目指しているとの事。

  • GroovyのDSLを利用してJenkinsの設定画面に命令を記載する
  • チェックポイントを設定することが出来る
    チェックポイントを設定することにより、実行が途中で停止してしまった(実行結果がエラーになった、Jenkinsが落ちた、等)場合でもチェックポイントから再開可能
  • ユーザの入力待ちを設定可能 自動化しても、どうしても人間との対話が必要なシーンが有る。例えば、テストしようとした場合にDBのスキーマが変わっていた等に人間との対話が出来るような仕組み
  • 記載したDSLの内容はバージョン管理可能

Jekinsの設定は簡素に

Jenkinsの設定画面にあれこれ細かい設定を行うよりも、スクリプトを呼び出す程度の簡素な設定とし、スクリプト側にやりたいことを全部記載しておく方法が一般的の様だった。
スクリプト側に主要な命令を記載しておくことでスクリプトをバージョン管理できるし、Jenkinsを触れないと設定した振る舞いの修正ができないという問題も回避できるため、有用な手段だと感じた。

何のためにJenkinsを導入するか?

Jenkinsを利用して何かを自動化したいと思われるが、何を自動化したいのか。

  • 自分が手動でやっていたことをJenkinsに任せる
  • 作業手順の簡素化
    秘伝のタレのようなメモからのコピペ実行ではなく、それらをスクリプト化したものをJenkinsに登録しておけば、JenkinsのUI上やチャットツール(Slack等)から簡単に呼び出せるので、複雑な手順を用いての作業から開放される。
  • デリバリーを目的とした自動化
    • 最終目的としての「継続的なデリバリー」
    • 即時リリース可能な状態を作っておく

手元の作業を自動化したいとは感じていたけれど、「最終目的としての「継続的なデリバリー」」という意識はあまり持てていなかった。もっと視野を広く持てるようにならないとな。

ジョブの説明に関して

ジョブのReadmeを作成しようという話があった。

  • 他人の作った複雑なジョブはどんな処理をしているのかが不明なため、その内容を読み解くまでは進んで利用したくない
  • 自分の作ったジョブでも、暫く使っていないとどんなジョブだったかを忘れている
  • Jenkinsのジョブの説明欄には文字数制限があるらしい
  • 長い説明になりそうな場合はWiki等に記載
    簡易的な説明を説明欄に記載した後、細かい説明はWiki等のURLを記載する

Workflow を利用するようになるとジョブの内容がより複雑化すると思うので、そのあたりの説明が乏しいとジョブのブラックボックス化が進みそうな予感がしたが、「DSL読んでね」で解決出来るだろうか。

Grep

Jenkinsの話に関連して、開発中のWebアプリケーションを動作させている際にmaster、staging、developのどれに接続しているのかをURLだけで判断するのは難しいため、「色分け等を行うことにより目視にて違いが判りやすくなる方法」という意味(と思われる)で「目Grep」という言葉を聞いた。

語源はなんだろうと思って調べたら以下のスライドがヒットしたが、なんだかやっていることが凄い。

目grep入門 +解説

バイナリエディタの機能で「ビットマップ表示」して可視化(?)出来るんだなぁ…。