狠狠撸

狠狠撸Share a Scribd company logo
Jenkins ?再?入?門
Miyata Jumpei (@miyajan)
Apr 20, 2016 #cybozu_ikyu
?自?己紹介
? 宮?田 ?淳平 ?(@miyajan) ?
? サイボウズ株式会社 ?
? 開発基盤部?生産性向上チーム ?
? 品質保証部テストエンジニアリングチーム ?
? 最近の趣味:筋トレ ?
? 5ヶ?月で50kg→60kg
今回のお话
社内の碍础滨窜贰狈アプリに登録されたレコード
当时の问题
Jenkins環境がカオス
? 1つのjenkinsを複数チームで共有していた ?
? 159ジョブ存在 ?
? ビルドマシンに必要なものを好き勝?手インストール ?
? 再構築がほぼ不不可能 ?
? jenkins本体やプラグインのアップデートが困難 ?
? アップデートするとなにかしらのジョブが落落ちる
ビルドスクリプトがカオス
? Jenkins上のジョブの設定に複雑なスクリプトが書かれている ?
? バージョン管理理できない ?
? grepとかもできない ?
? そこからGitのリポジトリ内にあるスクリプトを呼び出している ?
? 依存関係の把握が難しい ?
? スクリプトのメンテナンスが属?人的になりがち ?
? Jenkinsおじさんと呼ばれる
プラグインがカオス
? 予想外の挙動をする ?
? メンテナンスされてない ?
? プラグインを組み合わせるとうまく動かない ?
? どれをインストールしたか覚えてない
Jenkinsの構造上の問題
? GUI設定の功罪 ?
? GUIによる設定は?一?見見簡単だけどメンテナンス性が低い ?
? ホームページビルダーを思い出せ! ?
? ジョブの数が増えすぎると管理理が厳しい ?
? 全体の設定やプラグインが?一律律に適?用されてしまう ?
? ビルド環境がその場しのぎで変更更されていく ?
? 依存関係が複雑、再現不不能
闯别苍办颈苍蝉はオワコンなのか!?
最近流流?行行りの颁滨ツールはどうだろう!?
メリット
? リポジトリにymlファイルとか置くだけ ?
? シンプル ?
? バージョン管理理される ?
? コンテナベースのビルド ?
? 毎回クリーンかつ独?立立した環境 ?
? 単純なCI/CDに向いてる
デメリット
? 世の中の情報がまだ少ない ?
? ベストプラクティスが出揃ってない印象(偏?見見) ?
? Jenkins上で多様化かつ複雑化したジョブの置き換えが難しい ?
? 1リポジトリに複数のジョブ ?
? 並列列実?行行 ?
? cron的な使い?方 ?
? etc. ?
? できなくはないかもだけど結局カオス化しそう
闯别苍办颈苍蝉を置き换えるのも?辛そう!
闯别苍办颈苍蝉を?一からやり直そう!
Goal
? Jenkins本体とプラグインを気軽に更更新できる ?
? ジョブの設定の変更更が容易易 ?
? ビルド環境が独?立立かつ?手軽に再構築可能 ?
? これまでと同等以上のことができる
运?用编
Release ?Line
? Jenkinsには複数のRelease ?Lineが存在する ?
? LTS ?Release ?
? 3ヶ?月に1度度リリースされる安定版 ?
? その間は重要な不不具合改修のみ ?
? Weekly ?Release ?
? 毎週リリースされる最新版 ?
? 最新のJenkinsを試したい?人向き ?
? 業務で運?用するならLTS
master ?& ?slave
master
slave
slave
slave
build
build
build
master ?& ?slave
? master ?
? 通常SPOF ?
? 負荷をかけないようにビルドには使わないことを推奨 ?
? ノードの管理理から設定できる ?
? slave ?
? 冗??長性とscalabilityのために複数slaveを追加できる構成を推奨 ?
? ビルドはできる限り特定のslaveに依存しないようにする ?
? Windowsやmacだとしょうがない感ある ?
? Dockerコンテナ内でビルドすると便便利利(後述)
1チーム1Jenkins
? 複数チームで運?用すると調整が厳しい ?
? 本体やプラグインを他チームの事情で更更新できな
くなる ?
? 複数チームのSPOFになってしまう ?
? チームごとに楽に構築できるようにしたほうがいい
Jenkins構築
? masterはDockerで構築すると楽 ?
? tagを変えるだけでバージョン変更更できる
$ docker run 
-p 8080:8080 -p 50000:50000 
-v /var/jenkins_home:/var/jenkins_home 
-v /etc/localtime:/etc/localtime:ro 
--env JAVA_OPTS=“-Duser.timezone=Asia/Tokyo -Dfile.encoding=UTF-8
-Dsun.jnu.encoding=UTF-8” 
--env JENKINS_OPTS=“--sessionTimeout=1440” 
jenkins:1.642.4
構成管理理ツール
? masterもslaveも複数存在する状況になってくると構
成管理理ツールの導?入を推奨 ?
? メンテコスト削減 ?
? 環境構築?手順をスクリプトで?見見える化 ?
? 特定の環境だけ違うという状況を避ける ?
? ?自分はansible使ってます
プラグインの管理理
? プラグインはとても便便利利な反?面、問題を起こしやすい ?
? プラグインのメンテ頻度度が?高くないことが多い ?
? プラグイン同?士の組み合わせで予想外の問題が起きることも ?
? プラグインをインストールしすぎて管理理できなくなる ?
? どのプラグインが使われているor使われていないのか ?
? 本当に必要なプラグインだけ活?用する ?
? ビルドスクリプト側でなんとかなることが多い ?
? 使えるプラグインやハマるプラグインの情報を共有することも?大事
ジョブ设定编
ビルドスクリプト
? JenkinsのGUIに書かない ?
? 変更更を管理理できない ?
? リポジトリの変更更とスクリプトの変更更が連動しない ?
? リポジトリに?入れる ?
? GUIからは1スクリプト呼び出すだけにする ?
? 変更更を管理理できる ?
? リポジトリの変更更とスクリプトの変更更が連動する ?
? 構造化 ?
? しっかりDRY、KISSといった原則を守る ?
? 共通で呼び出されるスクリプトが区別できるようにディレクトリ構造を整理理
コンテナ内ビルド
? LinuxならDockerコンテナ内でビルド推奨 ?
? プラグインで実現可能 ?
? 環境の切切り替えが楽 ?
? クリーンで再現可能な環境
コンテナ内ビルド系プラグイン
? 複数ある ?
? Docker ?Plugin ?
? CloudBees ?Docker ?Custom ?Build ?Environment ?
Plugin ?
? Pipeline ?Plugin ?+ ?CloudBees ?Docker ?Pipeline ?Plugin ?
? どれがいいの?
Docker ?Plugin
? Dockerコンテナをslaveとして?立立ち上げる ?
? 設計上イケてない点が多い ?
? 使?用するイメージをシステムの設定で管理理するためジョブ
ごとに切切り替えられない ?
? コンテナ内でビルドしたいだけなのにコンテナをslaveにす
るのは?大げさ ?
? 今年年に?入って新しいバージョンがリリースされてない
CloudBees ?Docker ?Custom ?
Build ?Environment ?Plugin
? ビルドをDockerコンテナ内で実?行行する ?
? workspaceと/tmpをmountする ?
? 前処理理や後処理理はコンテナ内で?行行われないので注意 ?
? ジョブごとに使?用するイメージを切切り替えられる ?
? リポジトリ内のDocker?leを指定することもできる ?
? ?手軽に使えて実?用的
ちなみにCloudBeesって?
? エンタープライズ向けJenkinsソリューションを提供 ?
? Jenkinsの?生みの親、川?口耕介?氏がCTO ?
? Jenkins ?Enterprise ?
? ?大規模向けに技術サポートや独?自プラグイン ?
? オンプレミス版とクラウド版の両?方ある ?
? OSS版やコミュニティにも貢献
Pipeline ?Plugin
? デリバリーパイプラインをDSL(Groovy)で記述できるプラグイン ?
? 旧名Work?ow ?Plugin ?
? Build ?Pipeline ?PluginとかDelivery ?Pipeline ?Pluginとかややこしい名前
のプラグインが多いけど別物 ?
? Jenkins ?2.0では標準でインストールされる ?
? ジョブやパイプラインの設定をリポジトリで管理理できる ?
? コードで記述できるので柔軟な設定が可能 ?
? まだ発展途中感ある
Pipeline ?Plugin
node ?{ ?
 ? ? ?// ?Mark ?the ?code ?checkout ?'stage'.... ?
 ? ? ?stage ?'Checkout' ?
 ? ? ?// ?Get ?some ?code ?from ?a ?GitHub ?repository ?
 ? ? ?git ?url: ?'https://github.com/jglick/simple-‐??maven-‐??project-‐??with-‐??tests.git' ?
 ? ? ?// ?Get ?the ?maven ?tool. ?
 ? ? ?// ?** ?NOTE: ?This ?'M3' ?maven ?tool ?must ?be ?con?gured ?
 ? ? ?// ?** ? ? ? ? ? ? ?in ?the ?global ?con?guration. ? ? ? ? ? ? ? ? ? ? ? ?
 ? ? ?def ?mvnHome ?= ?tool ?'M3' ?
 ? ? ?// ?Mark ?the ?code ?build ?'stage'.... ?
 ? ? ?stage ?'Build' ?
 ? ? ?// ?Run ?the ?maven ?build ?
 ? ? ?sh ?"${mvnHome}/bin/mvn ?clean ?install" ?
}
Jenkins?le ?from ?SCM
Snippet ?Generator
Pipeline ?Stage ?View ?Plugin
CloudBees ?Docker ?Pipline ?
Plugin
? Pipeline ?Plugin内でDocker操作を記述できる
ようにしたプラグイン ?
? コンテナ内ビルド ?
? imageのbuild ?& ?publish ?
? オプションをコードで記述できるので柔軟
CloudBees ?Docker ?Pipeline ?
Plugin
docker.image(?‘maven:3.3.3-‐??jdk-‐??8?’).inside(?‘-‐??v ?/m2repo:/m2repo?’) ?{ ?
 ? ?git ?'…your-‐??sources…' ?
 ? ?sh ?'mvn ?-‐??B ?clean ?install' ?
}
Docker系プラグインまとめ
? 現在のジョブで?手軽に試すなら ?
? CloudBees ?Docker ?Custom ?Build ?
Environment ?Plugin ?
? Jenkins ?2.0時代を?見見据えるなら ?
? Pipeline ?Plugin ?+ ?CloudBees ?Docker ?
Pipeline ?Plugin
その他
? タイムアウトを設定する ?
? 予想外に滞留留したときに気づける ?
? Build-‐??timeout ?Plugin ?
? ディスク容量量に注意する ?
? 古いビルドの破棄や成果物の保存最?大数を設定する ?
? 誰が責任を持つジョブか分かるようにする ?
? ??長く運?用すると消していいのかわからないジョブが出てくる ?
? ジョブ名にチーム名or個?人名を?入れるとか
まとめ
? Jenkinsはカオスになりやすい ?
? GUI設定の功罪 ?
? ジョブが増えすぎると管理理不不能 ?
? その場しのぎのビルド環境 ?
? 運?用で回避できる ?
? ビルドスクリプトをバージョン管理理する ?
? Jenkinsを分散 ?
? コンテナによる再現可能かつクリーンなビルド環境 ?
? 正直まだ?手探り
One ?more ?thing…
Jenkins ?2.0
? ついに出るよ!
Jenkins ?1.x ?の歴史
? 2005年年 ?Hudson ?1.0リリース ?
? 2011年年 ?forkしてJenkins ?1.396リリース ?
? 2016年年 ?1.656ぐらい ?
? 11年年間1.xが続いた
Jenkins ?1.x ?の問題
? インストール後なにすればいいかわからん ?
? プラグイン多すぎ ?
? セキュリティの設定どうすればいいの ?
? Continuous ?Deliveryの普及でユースケースが複雑化 ?
? より柔軟にジョブの設定ができるUIが必要 ?
? 公式サイト(jenkins-‐??ci.org)古すぎ ?
? 6年年前からある ?
? ?目的のドキュメントを探せない ?
? そもそもJenkinsはCIだけじゃないし
Jenkins ?2.0 ?の?目?玉
? Pipeline ?as ?Code ?
? UI改善 ?
? 公式サイト改善 ?
? 1.xとの後?方互換性
Pipeline ?as ?Code
? Pipeline ?Pluginがデフォルトでインストール済み ?
? 複雑なJenkinsジョブを実現 ?
? ビルド、テスト、デプロイパイプライン ?
? より柔軟なロジックを組むための概念念 ?
? Stage, ?Human ?Input, ?Parallel ?
? Jenkinsの再起動からの復復旧 ?
? as ?Code ?
? すべてのジョブ定義がスクリプト化 ?
? バージョン管理理、コードレビューができる
UI改善
? セットアップウィザード ?
? ジョブ设定
Jenkins 再入門
Jenkins 再入門
Jenkins 再入門
Jenkins 再入門
Jenkins 再入門
Jenkins 再入門
Jenkins 再入門
Jenkins 再入門
新公式サイト(箩别苍办颈苍蝉.颈辞)
Roadmap
? 02/29: ?alpha ?
? 03/23: ?beta ?
? 04/06: ?RC ?
? 04/20: ?Release! ?
? 今年年の夏: ?
? LTS ?Release ?
? 1.xのメンテナンス停?止
Try ?2.0!
$ ?docker ?pull ?jenkinsci/jenkins:2.0-‐??rc-‐??1 ?
$ ?docker ?run ?-‐??p ?8080:8080 ?-‐??p ?50000:50000 ?jenkinsci/jenkins:2.0-‐??rc-‐??1
まとめ
? Jenkinsはまだまだ進化している ?
? 闯别苍办颈苍蝉最?高!
WE ?ARE ?HIRING!
Jenkinsを探求したい?方はぜひサイボウズへ! ?
http://cybozu.co.jp/company/job/recruitment/
Thanks!

More Related Content

Jenkins 再入門