jenkins 2.0 pipeline & blue ocean

22
Jenkins 2.0 Pipeline & Blue Ocean Workflow Engine Meetup #1 @hico_horiuchi

Upload: akihiko-horiuchi

Post on 19-Mar-2017

927 views

Category:

Technology


1 download

TRANSCRIPT

Jenkins 2.0

Pipeline & Blue Ocean

Workflow Engine Meetup #1

@hico_horiuchi

自己紹介堀内 晨彦 (Akihiko Horiuchi)

香川大学 工学部 情報系学科 院卒 Emacs, Ruby, Hubot, Sensu, Ansible, Go http://bit.ly/hiconyan

NTTコミュニケーションズでベアメタルクラウド の開発をしています

Jenkins と Ansible によるデプロイの自動化 RHEL 7.3 と CentOS 7.3の検証と実装

2

もくじ今日はこんな感じのことを喋ります

Jenkins のおさらい

Pipeline と Blue Ocean

デモンストレーション

チームでの 活用事例

3

Jenkinsのおさらい-

Jenkinsとは 何でもできる英国の執事 https://jenkins.io

Java製のオープンソース CI / CDツール

2011年に Hudson からフォークされた

ジョブは ShellScript や Groovy で記述

プラグイン による機能の追加や拡張

ビルド テスト デプロイ を自動化 開発サイクルをスピードアップ

5

Jenkinsオジサン 柔軟性 がありすぎて何でもできる Jenkins職人 と呼ばれることも

ジョブの作成が 属人化 する

ジョブの 依存関係 が複雑になる

実行環境 に何が入っているか不明

バージョンアップ すると動かない

Pipeline で簡略化 BlueOcean で可視化 Jenkins でバージョンを管理

6

PipelineとBlue Ocean-

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

ありがとうございました

Jenkins 2.0使ってみて下さい!-