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



    第2回大阪Jenkins勉強会
  2012/02/10 @ TIS株式会社

           1
自己紹介
•@ikikko / id:ikikko

• 所属
•株式会社 ヌーラボ
•日本Jenkinsユーザ会
             2
会社紹介
•自社サービス/プロダクト




•受託開発
        3
会社紹介




 4
アジェンダ
• 背景と問題点
• 対策:多数のプロジェクトの管理
• 依存ライブラリの管理
• プロジェクトの一括変更
• プロジェクトのお手軽コピー
• まとめ
    http://www.flickr.com/photos/darrentunnicliff/3371355414/
プロジェクト概要(初期)

•
フェーズ:共通に利用するフ
レームワークの開発

•人数:10名前後/月

• プロジェクト数:20前後
    EclipseやJenkinsなどのプロジェクト
               6
プロジェクト概要(現在)

•フェーズ:業務ロジックを含
 んだアプリケーションの開発

•人数:150名前後/月

• プロジェクト数は・・・
       7
8
問題点
•
20前後なら、頑張れば1つ1
つベタに管理できる

•100超えると無理ゲー


       9
アジェンダ
• 背景と問題点
• 対策:多数のプロジェクトの管理
• 依存ライブラリの管理
• プロジェクトの一括変更
• プロジェクトのお手軽コピー
• まとめ
        http://www.flickr.com/photos/darrentunnicliff/3371355414/
依存ライブラリの管理
•
依存しているライブラリを設
定ファイルに記述

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




 12
概要図




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

          14
ライブラリ管理機能がないと

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

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

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

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

          16
Jenkins連携
 http://www.flickr.com/photos/sunfrog1/900958237/
                      17
Jenkinsとの連携
•
プロジェクト
の上流下流の
設定
•   バージョンも考
    慮して自動設定
              18
Jenkinsとの連携
•
プロジェクト
間の成果物の
転送
•Jenkins側で特
    別な設定が不要
              19
関連ツール


http://www.flickr.com/photos/kwl/5127099146/
                    20
ライブラリ管理ツール
名称                    特徴
Maven 標準のビルドライフサイクルが定義されている

 Ivy   Antベース

Gradle Groovyで記述できる

SBT    Scalaで記述できる


                 21
リポジトリ管理ツール
    名称                                特徴

  Webサーバ+   Apacheのmod_dav など
WebDAVモジュール 手軽に用意できる

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


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

•   全プロジェクトを横断的に変更したい

• 例:エラー時のメール通知宛先に追加す
    る場合 など

•プロジェクトを1つずつ変更するのは
    大変

             24
スクリプトコンソール
// 全プロジェクトをループ処理
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

                                25
http://www.flickr.com/photos/ol1/5539623423/
26
Configuration Slicing
       Plugin
•
標準的な項目を、GUI上で一括
編集できる

•古いビルドの破棄
•E-mail通知 宛先
• ビルド無効化 etc...
          27
Scriptler Plugin
•スクリプトの保存・再利用

• 用意されている外部のスクリ
プトを利用可能

•スクリプト実行権限の管理
       28
アジェンダ
• 背景と問題点
• 対策:多数のプロジェクトの管理
• 依存ライブラリの管理
• プロジェクトの一括変更
• プロジェクトのお手軽コピー
• まとめ
        http://www.flickr.com/photos/darrentunnicliff/3371355414/
プロジェクトのコピー
• Jenkins本体の機能にプロジェクト
 のコピー機能はある

• コピー後に画面上から修正が必要
               **/* のように記述できる
• リポジトリのパス          項目は問題ない

• プロジェクト名を含んだ設定項目
 (Javadocの出力先など)
          30
プロジェクトの自前コピー
1. テンプレートのプロ
 ジェクトから設定ファ
 イルをコピー・取得
2. ファイル中のプロジェ
 クト依存箇所を修正
3. 修正した設定ファイル
 を基に、プロジェクト
 を新規作成

                31
Remote Access API
•   プログラムから操作可能なAPI

 • プロジェクトの作成
    • http://localhost/jenkins/createItem
 • プロジェクトの設定取得
    • http://localhost/jenkins/job/{name}/
      config.xml
                     32
http://www.flickr.com/photos/ol1/5539623423/
33
Cloudbees Template
           Plugin
•
テンプレートを予め作成してお
き、そのテンプレートを後から
利用できる
•job / builder / folder / auxiliary
                34
アジェンダ
• 背景と問題点
• 対策:多数のプロジェクトの管理
• 依存ライブラリの管理
• プロジェクトの一括変更
• プロジェクトのお手軽コピー
• まとめ
        http://www.flickr.com/photos/darrentunnicliff/3371355414/
まとめ
•
100近くあるJenkinsプロ
ジェクトの管理コストを、あ
の手この手で減らしています



       36
今日話さなかったこと
• スロービルド対策
• マシンのスケールアップ・アウト(スレーブ化)
• ビルド実行時間の計測・グラフ化
• 1クリックリリース
• リリーススクリプトの作成
• 環境ごとに設定を切り替える仕組み(プロファイル)
              37
Jenkinsの拡張




    38
今回手を入れたところ
•スクリプトコンソール
• ショートカットキーの割り当て
•Ivyプラグイン
• 特定の場合にビルドさせないように
•etc...
            39
プルリクエスト/バグ報告/翻訳

•お待ちしております(日本語
 でもOK)

• さんが対応してくれるで
 しょう

       40
最後に
http://www.flickr.com/photos/chrisjohnbeckett/3146818373/
                          41
デスマーチに疲れる日も
   ありますよね


     42
エ
ン
ジ
ニ
ア




    43
開
     発




44
それでも
僕は信じています


   45
46
エ
ン
ジ
ニ
ア




    47
Jenkinsによって
楽しいエンジニアライフ
 が送れることを


      48
ご清聴
ありがとうございました



     49

More Related Content

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