日時:2015-01-13(火)19:30 - 21:30
会場: オラクル青山センター
主催:日本Javaユーザグループ
#はやめぐり
JJUG主催だが、とくにJavaに限定した内容ではなく、3種類の発表。
Javaユーザに贈るJenkins 25のTips
http://www.slideshare.net/linoSth/javajenkins-25tips
Jenkins実践入門著者による25のプラグイン、Tips紹介
継続的インテグレーションから継続的デリバリーへ
IBM製のCIツールUrbancodeの紹介、Jenkinsとの比較。
https://developer.ibm.com/urbancode/
Chef/Puppet + Jenkinsによる継続的デリバリ
Jenkinsというプロジェクト・インフラを継続的デリバリーで実践する。
Puppet社社員と共同でJenkinsプロジェクト周辺環境の継続的デリバリを実現した。
https://github.com/jenkins-infra/jenkins-infra/
はじめは、Jenkins実践入門著者によるプラグイン紹介。定番どころから、昨年リリースされたワークフロープラグインまで。個人的にはXvfbプラグインを推したい。以前Windows上にJenkinsを構築したが、ビルド実行時にGUIのシミュレートが出来なくて積んだ経験があるので。(Linuxでビルドを走らせるのが前提)
次はJenkinsライクなIBM製の自動化ツールUrbanCodeの紹介。自動化導入時、JenkinsがOSSという点を上長に懸念される場合は検討しても良いかもしれない。
#JenkinsもEnterprise版はあるが、IBM製というバッググラウンドは大きい…
最後は川口さんのJenkinsによるJenkinsプロジェクトの継続デリバリー。Jenkins開発者によるJenkinsを利用した継続的デリバリーの見本が提示されているのは非常に参考になる。
GitHubで公開されているので、その機能や実装だけではなく、プルリクエストの履歴なども確認することができ、実際の開発プロセスの履歴まで提示されている。
#発表メモ
##Javaユーザに贈るJenkins 25のTips
ご登壇者:佐藤聖規氏 (@lino_s)
http://www.slideshare.net/linoSth/javajenkins-25tips
Jenkins実践入門などを執筆。
1.Gitプラグイン
https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin
説明不要。Gitがデファクトスタンダードの今必須のプラグイン。
※Enterprise版限定プラグインだが、Validated Mergeプラグインが便利。
https://www.cloudbees.com/products/jenkins-enterprise/plugins/validated-merge-plugin
2.GitHubプラグイン
説明不要。GitHubがデファクt(ry
https://wiki.jenkins-ci.org/display/JENKINS/GitHub+Plugin
webhookでプッシュしてビルドすることができる
3. Gradleプラグイン
Gradleを使う際、スレーブのOS環境を意識する必要がなくなる。
https://wiki.jenkins-ci.org/display/JENKINS/Gradle+Plugin
4. CheckStyleプラグイン
https://wiki.jenkins-ci.org/display/JENKINS/Checkstyle+Plugin
5. FindBugsプラグイン
https://wiki.jenkins-ci.org/display/JENKINS/Findbugs+Plugin
4.とともに、静的解析結果の表示するプラグイン
6.TaskScannerプラグイン
https://wiki.jenkins-ci.org/display/JENKINS/Task+Scanner+Plugin
ビルド対象のJavaファイルコメント内のTODOやFIX MEを集計してくれる。
7. JobConfigHistoryプラグイン
https://wiki.jenkins-ci.org/display/JENKINS/JobConfigHistory+Plugin
ジョブの設定の変更履歴を作れる
ビルド履歴とも連携するので、どのビルドから変更したかも管理できる。
※ただビルドスクリプトは原則プロジェクトと一緒に構成管理に突っ込んでおくのがよいみたい。
8.Timestamper
https://wiki.jenkins-ci.org/display/JENKINS/Timestamper
コンソール出力の結果にタイムスタンプを付けてくれる。
9.Emotional Jenkinsプラグイン
https://wiki.jenkins-ci.org/display/JENKINS/Emotional+Jenkins+Plugin
ジョブ背景のJenkinsおじさんの絵柄がジョブのステータスで変化する。
10.Green Ballsプラグイン
https://wiki.jenkins-ci.org/display/JENKINS/Green+Balls
ジョブの成功時の青信号を緑に変えてくれる
TDDしている人に人気。
11.Nesteed Viewプラグイン
https://wiki.jenkins-ci.org/display/JENKINS/Nested+View+Plugin
ジョブをディレクトリ管理したように階層構造で表示することができる。
12.Tips:JUnitのテストレポートを表示することができる。
JUnit互換のXMLを出力するxUnitフレームワークならば(RSpecやgoogletestなど)JUnitと同様にレポートを表示できる
13.Tips:マルチ構成プロジェクト
ジョブを作成するときにマルチ構成にすることでブラウザのバリエーションやOSごとの結果をMatrix表示することができる。
14.Tips:パンくずメニューでショートカット
逆三角がでているメニューはだいたいショートカットメニューが表示される。
15.Tips:コンソールにジャンプ
ビルド中の青進捗バーをクリックするとコンソール出力に飛べる
16.Tips:safeRestart
http://jenkinsurl/safeRestartにアクセスするとリスタートできる。
/safeRestart は実行中のジョブが完了するのを待ってから再起動をかける。/restartは問答無用で今すぐ再起動する。
http://twitter.com/kohsukekawa/status/554953298411659265
17.Deployプラグイン
https://wiki.jenkins-ci.org/display/JENKINS/Deploy+Plugin
user idとpasswordとデプロイ先を指定すればデプロイできる
GlassFish 2.x/3.x JBoss 3.x/4.x Tomcat 4.x/5.x/6.x/7.xに対応。
18.Xvfbプラグイン
https://wiki.jenkins-ci.org/display/JENKINS/xvfb+Plugin
Xウインドウが無いLinuxでも仮想ディスプレイをエミュレートできる。
Seleniumなどを利用したいときに用いる。
19. Build Pipline viewプラグイン
https://wiki.jenkins-ci.org/display/JENKINS/Build+Pipeline+Plugin
一連のジョブのプロセスの流れを可視化してくれる。
20. Promoted Buildsプラグイン
https://wiki.jenkins-ci.org/display/JENKINS/Promoted+Builds+Plugin
誰かが承認したときのみ昇進することができる。
21.Workflowプラグイン
https://github.com/jenkinsci/workflow-plugin
ひとつのジョブでワークフローを実現できる。
Groovyを用いてワークフローを定義。スニペットもある
22.Slackプラグイン
Slackに通知するプラグイン
23.Email-extプラグイン
https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+plugin
メール通知をリッチにするプラグイン
24.Disk Usageプラグイン
https://wiki.jenkins-ci.org/display/JENKINS/Disk+Usage+Plugin
ワークスペースが利用しているディスク容量などを可視化できる。
25.Monitoring
https://wiki.jenkins-ci.org/display/JENKINS/Monitoring
CPUやメモリ、スレッド数の可視化できる。
###Jenkins実践入門は改訂中。
最新のUIに対応するなど、改訂を行なっている。
##継続的インテグレーションから継続的デリバリーへ
ご登壇者:黒川 敦氏(日本アイ・ビー・エム株式会社)
ツールの共有は難しい。
開発と運用部門にわかれた組織だとE2Eのインフラストラクチャーが制限されてしまう可能性がある。部門によって思いが異なるため。
- 開発:できたらすぐにでもデプロイしたい
- 運用:手順をきちんと確認、検証して念入りにデプロイしたい
###DevOps or NoOps
「リリースとデプロイ」作業でよくある課題
エンタープライズだと、開発者が作成したリリース手順書が組織をまたぐたびに変更されてしまう。
また、デプロイ時は様々な承認ルートやコンプライアンスの壁ができる。
CD(継続的デリバリー)を実現するIBM UrbanCode
ターゲット環境にデプロイできることが大きな課題である。
デプロイゲートをしっかりクリアするからこそ自動デプロイできる。
- リリースフロー図をドラッグアンドドロップで作成することでリリース手順を定義できる。
- プラグインも多く用意されている
- 各環境のアプリケーションリリース状況の確認もできる。
- 品質ゲートとして様々なチェックリストを設定することもできる。
- リリース承認プロセスをフローの中で定義することもできる。
- ワークフローはGroovyで作成することができる。
JenkinsとIBM UrbanCodeの比較
※あくまでIBMの比較結果
Jenkins | UrbanCode |
---|---|
オープンソース | 商用商品 |
ビルドに焦点をあてる | リリースに焦点をあてる |
開発者視点 | 開発者+運用者視点 |
ビルド単位の権限 | ターゲット環境単位の権限 |
継続的インテグレーション | 継続的デリバリー |
##Chef/Puppet + Jenkinsによる継続的デリバリ
ご登壇者:川口 耕介氏 (@kohsukekawa)
より広範なEnd-to-endの自動化の進展。すなわち「継続的デリバリ」
jenkins-ci.org運用上のニーズ
- テスト環境がない
- システム管理者が分散している
- 自分たちの提唱することを自分たちで実践
Jenkinsというプロジェクト・インフラを継続的デリバリーで実践する。
https://github.com/jenkins-infra/jenkins-infra/
Puppetのエンジニア公認のPuppetプロジェクト。共同で作成した。
###個々のサービスのコンテナ化
個々をそれぞれ単体でテストをしたい。
Gitで各サービスをコンテナ管理してDockerリポジトリにpushされていく。
ビルドごとにユニークなタグをつけている
###rspec-puppetによるプルリクエストの検証を行う。
puppetマニフェスト内のビルド番号が変更されたらデプロイの検証を行いたい。
puppetマニフェストの変更をインフラチームがプルリクすることで、hookが走りテストが行われる。
どういうテストを行えばいいのか?
- まず文法的なチェックをrspec-puppetで確認する。
- serverspecとVagrantによる動作確認。実際にデプロイ処理を走らせてみる。
###r10k + puppet enterprise
ブランチが自動的にenvironmentになる
依存モジュールの解決とロードを行う
ブランチを環境にマップすることができる。
環境別の差異を吸収するHieraを使っている
Hieraは環境ごとに異なるidやAPIトークンなどのデータを管理するためのPuppetの管理ファイル。
hiera-eyaml パラメータの個別暗号化
stagingからproductionにデプロイするときもGitHub上のプルリクで行う。
jenkins-infraのプルリクなどを参考のこと。
###継続的デリバリの課題
デプロイは実際にいつ起こったのか?
このサーバで走っているのはどのビルドか?
スタックトレースからソースコードへの正確なマッピング
###end-to-endトラッキング
https://wiki.jenkins-ci.org/display/JENKINS/Deployment+Notification+Plugin
Jenkinsでファイル指紋を付けてビルド、指紋を追跡した結果を基にしたさらなる自動化を実現する。
ファイル指紋。ビルドごとに異なるファイル指紋を記録する。
どのリビジョンが
どこでいつビルドされ、
どこいつテストされ?
どこでデプロイされたのか
puppetのレポート機能でファイル指紋をJenkinsに送り、スモークテストで記録しておく。
Opes側の変更は最小に
Ops側に必要な変更を最小限にすることを考慮したデザインが行われている。
Chef
カスタムレポートハンドラとして実装
Puppet
標準レポート形式をJenkinsにPOSTするだけ
Ansibleなどにも今後対応予定。
##今後の予定
さらなるデータの可視化
ファイルじゃないものの指紋も取得したい。
jenkins-ci.orgの運用でもこれを使う