SlideShare uma empresa Scribd logo
1 de 49
中規模プロジェクトでの
  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

Mais conteúdo relacionado

Destaque

Jenkinsを使った初めての継続的インテグレーション
Jenkinsを使った初めての継続的インテグレーションJenkinsを使った初めての継続的インテグレーション
Jenkinsを使った初めての継続的インテグレーション
dcubeio
 
jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー
jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリーjenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー
jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー
Junya Suzuki
 

Destaque (20)

JenkinsとjMeterで負荷テストの自動化
JenkinsとjMeterで負荷テストの自動化JenkinsとjMeterで負荷テストの自動化
JenkinsとjMeterで負荷テストの自動化
 
20160128 jjug Nightセミナー_Git実践入門
20160128 jjug Nightセミナー_Git実践入門20160128 jjug Nightセミナー_Git実践入門
20160128 jjug Nightセミナー_Git実践入門
 
アメーバピグとJenkinsと私
アメーバピグとJenkinsと私アメーバピグとJenkinsと私
アメーバピグとJenkinsと私
 
kintoneエンジニアが紹介する品質向上のための取り組み
kintoneエンジニアが紹介する品質向上のための取り組みkintoneエンジニアが紹介する品質向上のための取り組み
kintoneエンジニアが紹介する品質向上のための取り組み
 
Gitはじめの一歩
Gitはじめの一歩Gitはじめの一歩
Gitはじめの一歩
 
JenkinsとGitで実装するGatewayCheckIn Pattern #AsianAA
JenkinsとGitで実装するGatewayCheckIn Pattern #AsianAAJenkinsとGitで実装するGatewayCheckIn Pattern #AsianAA
JenkinsとGitで実装するGatewayCheckIn Pattern #AsianAA
 
Jenkinsを使った初めての継続的インテグレーション
Jenkinsを使った初めての継続的インテグレーションJenkinsを使った初めての継続的インテグレーション
Jenkinsを使った初めての継続的インテグレーション
 
フリーでやろうぜ!セキュリティチェック!
フリーでやろうぜ!セキュリティチェック!フリーでやろうぜ!セキュリティチェック!
フリーでやろうぜ!セキュリティチェック!
 
20121019-jenkins-akiko_pusu.pdf
20121019-jenkins-akiko_pusu.pdf20121019-jenkins-akiko_pusu.pdf
20121019-jenkins-akiko_pusu.pdf
 
JenkinsをJava開発でこんな感じで使っています
JenkinsをJava開発でこんな感じで使っていますJenkinsをJava開発でこんな感じで使っています
JenkinsをJava開発でこんな感じで使っています
 
jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー
jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリーjenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー
jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー
 
AWS Black Belt Tech シリーズ 2015 - AWS CloudFormation
AWS Black Belt Tech シリーズ 2015 - AWS CloudFormationAWS Black Belt Tech シリーズ 2015 - AWS CloudFormation
AWS Black Belt Tech シリーズ 2015 - AWS CloudFormation
 
進化するWebトラッキングの話 #ssmjp
進化するWebトラッキングの話 #ssmjp進化するWebトラッキングの話 #ssmjp
進化するWebトラッキングの話 #ssmjp
 
第9回Jenkins勉強会 超簡単Pipeline講座
第9回Jenkins勉強会 超簡単Pipeline講座第9回Jenkins勉強会 超簡単Pipeline講座
第9回Jenkins勉強会 超簡単Pipeline講座
 
Jenkinsではじめる継続的インテグレーション
Jenkinsではじめる継続的インテグレーションJenkinsではじめる継続的インテグレーション
Jenkinsではじめる継続的インテグレーション
 
2015/04/01 AWS Blackbelt EC2
2015/04/01 AWS Blackbelt EC22015/04/01 AWS Blackbelt EC2
2015/04/01 AWS Blackbelt EC2
 
アジャイルメトリクス実践ガイド
アジャイルメトリクス実践ガイドアジャイルメトリクス実践ガイド
アジャイルメトリクス実践ガイド
 
AWS Black Belt Techシリーズ リザーブドインスタンス & スポットインスタンス
AWS Black Belt Techシリーズ リザーブドインスタンス & スポットインスタンスAWS Black Belt Techシリーズ リザーブドインスタンス & スポットインスタンス
AWS Black Belt Techシリーズ リザーブドインスタンス & スポットインスタンス
 
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11
 
[RSGT2017] つらい問題に出会ったら
[RSGT2017] つらい問題に出会ったら[RSGT2017] つらい問題に出会ったら
[RSGT2017] つらい問題に出会ったら
 

Mais de ikikko

JenkinsによるCIの導入
JenkinsによるCIの導入JenkinsによるCIの導入
JenkinsによるCIの導入
ikikko
 

Mais de ikikko (20)

SCRUMMASTER THE BOOKで広がるスクラムマスターの世界
SCRUMMASTER THE BOOKで広がるスクラムマスターの世界SCRUMMASTER THE BOOKで広がるスクラムマスターの世界
SCRUMMASTER THE BOOKで広がるスクラムマスターの世界
 
SCRUMMASTER THE BOOK翻訳活動における、リモート x モブ実践
SCRUMMASTER THE BOOK翻訳活動における、リモート x モブ実践SCRUMMASTER THE BOOK翻訳活動における、リモート x モブ実践
SCRUMMASTER THE BOOK翻訳活動における、リモート x モブ実践
 
スクラム風でのつまずき体験から学んだこと
スクラム風でのつまずき体験から学んだことスクラム風でのつまずき体験から学んだこと
スクラム風でのつまずき体験から学んだこと
 
継続的インテグレーションの過去・現在・そして未来 〜ヌーラボの事例と共に考える〜
継続的インテグレーションの過去・現在・そして未来 〜ヌーラボの事例と共に考える〜継続的インテグレーションの過去・現在・そして未来 〜ヌーラボの事例と共に考える〜
継続的インテグレーションの過去・現在・そして未来 〜ヌーラボの事例と共に考える〜
 
Devとopsをつなぐchat ops
Devとopsをつなぐchat opsDevとopsをつなぐchat ops
Devとopsをつなぐchat ops
 
エンジニア目線での対外ブランディング ~ヌーラボ編~
エンジニア目線での対外ブランディング ~ヌーラボ編~エンジニア目線での対外ブランディング ~ヌーラボ編~
エンジニア目線での対外ブランディング ~ヌーラボ編~
 
Jenkinsユーザカンファレンス2015 前座資料
Jenkinsユーザカンファレンス2015 前座資料Jenkinsユーザカンファレンス2015 前座資料
Jenkinsユーザカンファレンス2015 前座資料
 
Nulabとawsと私
Nulabとawsと私Nulabとawsと私
Nulabとawsと私
 
Infrastructure as code ~ ツールスタック / ヌーラボの事例 ~
Infrastructure as code ~ ツールスタック / ヌーラボの事例 ~Infrastructure as code ~ ツールスタック / ヌーラボの事例 ~
Infrastructure as code ~ ツールスタック / ヌーラボの事例 ~
 
ヌーラボのサービス開発の裏側公開しちゃいます
ヌーラボのサービス開発の裏側公開しちゃいますヌーラボのサービス開発の裏側公開しちゃいます
ヌーラボのサービス開発の裏側公開しちゃいます
 
Backlog/Cacooから学ぶ、サービスに必要な機能の取捨選択と改善の仕方
Backlog/Cacooから学ぶ、サービスに必要な機能の取捨選択と改善の仕方Backlog/Cacooから学ぶ、サービスに必要な機能の取捨選択と改善の仕方
Backlog/Cacooから学ぶ、サービスに必要な機能の取捨選択と改善の仕方
 
Jenkinsプラグインの中身を覗いてみよう
Jenkinsプラグインの中身を覗いてみようJenkinsプラグインの中身を覗いてみよう
Jenkinsプラグインの中身を覗いてみよう
 
Jenkins実践入門のnext step
Jenkins実践入門のnext stepJenkins実践入門のnext step
Jenkins実践入門のnext step
 
JenkinsによるCIの導入
JenkinsによるCIの導入JenkinsによるCIの導入
JenkinsによるCIの導入
 
レガシーコード改善ガイド輪読会 第9章
レガシーコード改善ガイド輪読会 第9章レガシーコード改善ガイド輪読会 第9章
レガシーコード改善ガイド輪読会 第9章
 
モテBTS ~ backlog ~
モテBTS ~ backlog ~モテBTS ~ backlog ~
モテBTS ~ backlog ~
 
Google Apps Scirpt勉強会 #1
Google Apps Scirpt勉強会 #1Google Apps Scirpt勉強会 #1
Google Apps Scirpt勉強会 #1
 
G*ワークショップ+忘年LT大会
G*ワークショップ+忘年LT大会G*ワークショップ+忘年LT大会
G*ワークショップ+忘年LT大会
 
エルシャダイで学ぶ、大丈夫な「ビルド通知」
エルシャダイで学ぶ、大丈夫な「ビルド通知」エルシャダイで学ぶ、大丈夫な「ビルド通知」
エルシャダイで学ぶ、大丈夫な「ビルド通知」
 
今から始めるGoogle apps scirpt
今から始めるGoogle apps scirpt今から始めるGoogle apps scirpt
今から始めるGoogle apps scirpt
 

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