jenkins 2.0 pipeline & blue ocean
TRANSCRIPT
自己紹介堀内 晨彦 (Akihiko Horiuchi)
香川大学 工学部 情報系学科 院卒 Emacs, Ruby, Hubot, Sensu, Ansible, Go http://bit.ly/hiconyan
NTTコミュニケーションズでベアメタルクラウド の開発をしています
Jenkins と Ansible によるデプロイの自動化 RHEL 7.3 と CentOS 7.3の検証と実装
2
Jenkinsとは 何でもできる英国の執事 https://jenkins.io
Java製のオープンソース CI / CDツール
2011年に Hudson からフォークされた
ジョブは ShellScript や Groovy で記述
プラグイン による機能の追加や拡張
ビルド テスト デプロイ を自動化 開発サイクルをスピードアップ
5
Jenkinsオジサン 柔軟性 がありすぎて何でもできる Jenkins職人 と呼ばれることも
ジョブの作成が 属人化 する
ジョブの 依存関係 が複雑になる
実行環境 に何が入っているか不明
バージョンアップ すると動かない
Pipeline で簡略化 BlueOcean で可視化 Jenkins でバージョンを管理
6
Pipeline Pluginhttps://jenkins.io/doc/book/pipeline/
DSL(Groovy) で簡単にジョブを定義 条件分岐 や 例外処理 や 並列実行 もできる Jenkinsfile を書いてリポジトリに入れておく ブランチごと に自動でジョブを作ってくれる
8
Pipeline Syntaxpipeline { stages { stage('build') { steps { sh 'make' } } }}
stage : ビルドやテストなどワークフローの段階steps : 具体的な処理(コマンドの実行など)
他にも環境変数を設定する environment や タイムアウトやリトライを設定する options がある
9
条件分岐と例外処理 masterブランチの場合はデプロイする
when { branch 'production'} sh 'make build'}
結果に関わらず最後にクリーンアップする
try { sh 'make'} finally { sh 'make clean'}
10
Blue Ocean Pluginhttps://jenkins.io/projects/blueocean/Introducing Blue Ocean
JenkinsのUXを オサレ にする取り組み Pipelineの手順や状態を 可視化 お気に入りを集めた個人用の ダッシュボード Design Language で統一性のあるUI
11
デモ環境の紹介https://github.com/hico-horiuchi/jedi-ansible
Ansible を使って、Docker コンテナを起動Pipeline でデプロイのワークフローを実装
GitHubからリポジトリをクローン Dockerをインストール WebサーバとLBのコンテナを起動 監視と可視化ツールのコンテナを起動 Serverspecで正常性を確認
これを Jenkins から ワンクリック で実行します ジョブを 並列実行 して 高速化 してみました
16
Jenkinsfilenode { stage 'checkout' git url: 'git://github.com/hico-horiuchi/jedi-ansible.git' sh 'cp hosts_samples/hosts.jedi hosts'
...
stage 'web' parallel 'clone': { node { sh 'ansible-playbook -i hosts -t clone site.yml' } }, 'nginx': { node { sh 'ansible-playbook -i hosts -t nginx site.yml' } }
...
stage 'serverspec' sh 'bundle install' sh 'bundle exec rake serverspec:all'}
18
Jenkinsの使い所いろんなところでJenkinsに頼っています
GitHubと連携してテストを実行(Ansibleで環境構築してRSpecを実行)
ワークフローでデプロイを自動化(Blue-Green Deploymentを実施)
死活監視・外形監視とアラートの通知(Consulで両系断を監視、Slackに通知)
インタフェースの統一、ノウハウの共有 不得意でも、あれもこれもJenkins
20
Jenkins 2.0に移行したい Multijob → Pipeline
ジョブの構成や依存関係が複雑になりやすい
GUIの使い勝手が悪い(リンクの繰り返し)
Job Builder → Jenkinsfile
テンプレート展開の嵐(Jinja、ERB)
コードとジョブを一緒に管理したい
アップデートしてハッピーJenkinsライフ
21