中規模プロジェクトでのJenkinsの運用を支える技術

第13回 ITテクニカルセミナー
2012/05/24
1

自己紹介

•
株式会社
ヌーラボ
•
中村知成

•前回は、Jenkinsの基礎についてお話しました
2

会社紹介

•

自社サービス/プロダクト

•

受託開発
3

会社紹介

4

アジェンダ• 背景と問題点• 対策：多数のプロジェクトの管理• 依存ライブラリの管理• プロジェクトの一括変更• プロジェクトのお手軽コピー• まとめ
http://www.ﬂickr.com/photos/darrentunnicliﬀ/3371355414/

プロジェクト概要(初期)•フェーズ：共通に利用するフレームワークの開発•
プロジェクト数：20前後•
人数：10名前後/月EclipseやJenkinsなどのプロジェクト
6プロジェクト概要(中期)•フェーズ：業務ロジックを含んだアプリケーションの開発•
プロジェクト数：100以上！
•人数：150名前後/月

7

問題点

•

20前後なら、頑張れば1つ1つベタに管理できる•

100超えると正直厳しい8

比較

プロジェクト数が多い / 少ない場合
http://www.ﬂickr.com/photos/sepehrehsani/5766453552/
9プロジェクト数が少ないと• 問題が起きたときの切り分けや制御 PJ 1が難しい• 1プロジェクト当PJ 2たりのビルドに時間がかかる

compile / test / deploy

compile / test

時間10

プロジェクト数が多いと• 設定のメンテナン
スが大変

compileunit test

PJ 1• プロジェクト間のdeploy

連携がやりづらい•

compilePJ 2

全体のビルド時間がかかる

unit test
integration test
時間11

今回の方針http://www.ﬂickr.com/photos/emiliano-iko/4480463490/
12

プロジェクト数を絞る•

メンテナンス性を重視•設定をできるだけ統一して、一元的に管理している•ちょくちょく設定改善している13

プロジェクト数を絞る•

安定運用に入ったら違うかも•セオリーとしては、プロジェク
トを細かく分ける（多くする）

14

アジェンダ• 背景と問題点• 対策：多数のプロジェクトの管理• 依存ライブラリの管理• プロジェクトの一括変更• プロジェクトのお手軽コピー• まとめ
http://www.ﬂickr.com/photos/darrentunnicliﬀ/3371355414/

依存ライブラリの管理•依存しているライブラリを設定ファイルに記述•

自動的にライブラリを取得•ライブラリが依存しているライ
ブラリも推移的に取得
16

概要図

17

概要図

18

導入の背景•ライブラリの依存管理を自分でやりたくない•特にライブラリのバージョンが変わったときの管理が煩雑
19

ライブラリ管理機能がないと•ライブラリを使用する全プロジェクトに手動でコピーする必要がある•

バージョンが変わる度に手動で入れ替えなければならない
20メリットが大きいケース•

ライブラリ（プロジェクト）の数が多い•

ライブラリのバージョンが頻
外部ライブラリの管理より、内部の繁に変わる ライブラリを細かくバージョン切ってその管理に使用する方がより効果的
21

Jenkins連携
http://www.ﬂickr.com/photos/sunfrog1/900958237/

22

Jenkinsとの連携•プロジェクトの上流下流の設定•

バージョンも考慮して自動設定23

Jenkinsとの連携•

プロジェクト間の成果物の転送•Jenkins側で特別な設定が不要
24

関連ツール

http://www.ﬂickr.com/photos/kwl/5127099146/

25

ライブラリ管理ツール
名称

特徴

Maven 標準のビルドライフサイクルが定義されている
Ivy

Antベース

Gradle Groovyで記述できる
SBT

Scalaで記述できる

26

リポジトリ管理ツール
名称

特徴

Webサーバ＋
Apacheのmod̲dav など
WebDAVモジュール 手軽に用意できる専用ツール

Artifactory / Nexus など
リモートリポジトリのキャッシュといった、便利な機能が付随
参考 : http://d.hatena.ne.jp/ikikko/20111202/1322831201

27

アジェンダ• 背景と問題点• 対策：多数のプロジェクトの管理• 依存ライブラリの管理• プロジェクトの一括変更• プロジェクトのお手軽コピー• まとめ
http://www.ﬂickr.com/photos/darrentunnicliﬀ/3371355414/

プロジェクトの一括変更•全プロジェクトを横断的に変更したい• 例：エラー時のメール通知宛先に追加する場合 など•プロジェクトを1つずつ変更するのは大変
29スクリプトコンソール// 全プロジェクトをループ処理
jenkins.model.Jenkins.instance.items.each {println "Job : ${it.name}"// 各プロジェクトにメール通知の宛先を追加
def mailer =it.publishersList.get(hudson.tasks.Mailer.class)mailer?.recipients += ' foo@example.com'}スクリプトを書いているとJenkinsの内部実装に詳しくなれます
参考 : http://d.hatena.ne.jp/ikikko/20111202/1322831201
30

31

http://www.ﬂickr.com/photos/ol1/5539623423/

Conﬁguration Slicing
Plugin•

標準的な項目を、GUI上で一括編集できる•古いビルドの破棄•E-mail通知 宛先
ビルド無効化
etc...
•
32

Scriptler Plugin•
用意されている外部のスクリ•スクリプトの保存・再利用

プトを利用可能•スクリプト実行権限の管理
33

アジェンダ• 背景と問題点• 対策：多数のプロジェクトの管理• 依存ライブラリの管理• プロジェクトの一括変更• プロジェクトのお手軽コピー• まとめ
http://www.ﬂickr.com/photos/darrentunnicliﬀ/3371355414/

プロジェクトのコピー• Jenkins本体の機能にプロジェクトのコピー機能はある• コピー後に画面上から修正が必要**/* のように記述できる
項目は問題ない• リポジトリのパス• プロジェクト名を含んだ設定項目（Javadocの出力先など）
35

プロジェクトの自前コピー
1. テンプレートのプロ
ジェクトから設定ファイルをコピー・取得
2. ファイル中のプロジェ
クト依存箇所を修正
3. 修正した設定ファイル
を基に、プロジェクトを新規作成
36

Remote Access API•

プログラムから操作可能なAPI• プロジェクトの作成• http://localhost/jenkins/createItem• プロジェクトの設定取得• http://localhost/jenkins/job/{name}/
conﬁg.xml
37

38

http://www.ﬂickr.com/photos/ol1/5539623423/

Cloudbees Template
Plugin•テンプレートを予め作成しておき、そのテンプレートを後から利用できる•job / builder / folder / auxiliary
39

アジェンダ• 背景と問題点• 対策：多数のプロジェクトの管理• 依存ライブラリの管理• プロジェクトの一括変更• プロジェクトのお手軽コピー• まとめ
http://www.ﬂickr.com/photos/darrentunnicliﬀ/3371355414/

まとめ

•

100近くあるJenkinsプロ
ジェクトの管理コストを、あの手この手で減らしています

41

今日話さなかったこと• スロービルド対策• マシンのスケールアップ・アウト（スレーブ化）• ビルド実行時間の計測・グラフ化• 1クリックリリース• リリーススクリプトの作成• 環境ごとに設定を切り替える仕組み（プロファイル）42ご清聴ありがとうございました

43