1
超簡単Pipeline講座
2016/08/10 第9回Jenkins勉強会
玉川紘子/@nkns165
2
 自己紹介
 Pipeline概説
 Jenkins2.0のPipeline入門
 ※本当に入門しか喋りません。
AGENDA
3
 自己紹介
 Pipeline概説
 Jenkins2.0のPipeline入門
 ※本当に入門しか喋りません。
AGENDA
4
自己紹介
名前:玉川 紘子(@nkns165)
所属:株式会社SHIFT ソフトウェアテスト事業本部
技術開発部
コミュニティ:STAR(テスト自動化研究会)
日本Jenkinsユーザ会
5
CI・自動テストなんでも屋さんとして活動中
メイン業務はCI・自動テストに関するなんでもサポート屋
Jenkinsに関するセミナー、書籍のお手伝いなども
 運用方針の提案
 実際に稼働するCI環境の構築
 テストの書き方指南
Jenkinsってどうやって
使えばいいんだっけ?
Seleniumで
テストを書いてみたい
んだけど…
6
資格も取ってみました。
 2016年5月より運用開始
 プロメトリックのテストセンターで東京でも受験可能
 ただし、受験指示から問題・回答まですべて英語
7
 自己紹介
 Pipeline概説
 Jenkins2.0のPipeline入門
 ※本当に入門しか喋りません。
AGENDA
8
 こういうのとか
 こういうのとか
Jenkinsで「何らかのワークフロー」
を書きたいという欲求
Pipeline概説
成功したときだけ
次に行きます
成果物やパラメタを
次のジョブに渡します
9
「GUIで気軽に設定できるのがJenkinsの魅力!」
だけど…?
そのためのプラグインたち
Pipeline概説
Join PluginParameterized Trigger Plugin
Build Pipeline Plugin
Promoted Builds Plugin
…
10
いちいちGUIで設定するの面倒くさい
(> <)
11
そこでPipeline
Pipeline概説
 Pipeline Plugin
 Groovyのスクリプトでワークフローを記述可能
 Jenkins2.0から公式に押され始めたワークフロー管理系のデファクト
 2014年末頃に「Workflow Plugin」としてリリース
 ワークフローの可視化機能は有償
 2016年1月から「Pipeline Plugin」に改名、2月に可視化機能がOSS化
12
Pipeline Plugin(=Pipeline as Code)
を使うメリット
Pipeline概説
 保守性の高さ
 テキストファイルでスクリプトを記述 ⇒ 読みやすい!
 バージョン管理 ⇒ 変更を把握し、意図をつかみやすい!
 対応範囲の広さ
 Groovyスクリプトという1つの形式で様々なワークフローを記述可
能
⇒ いろんなプラグイン覚えなくていい!
 可読性の高さ
 内部関数の定義も可能 ⇒ 大規模化しても大丈夫!
 安全性
 Jenkinsを再起動してもresume(できる内容に制限はある)
13
 自己紹介
 Pipeline概説
 Jenkins2.0のPipeline入門
 ※本当に入門しか喋りません。
AGENDA
14
 新規ジョブ作成で「Pipeline」を選択
 実行したい内容をGroovyのスクリプトとして記述
Pipelineの作成方法
Jenkins2.0のPipeline入門
Pipelineの内容
(ここでは、サンプ
ルとして用意されて
いる文字列出力のみ
の簡単なもの)
記法を覚えていなく
ても簡単にスクリプ
トを生成するための
機能
(次頁)
15
 「Sample Step」から機能を選択
 機能に合わせたパラメタを設定
 「Generate Groovy」で生成されたスクリプトを貼り付ける
Pipeline Syntax
Jenkins2.0のPipeline入門
ジョブのビルド以外にも文字列出力、
ソースコード取得、メール等様々
これを前頁の
エディタに貼り付ける
ジョブのビルドではジョ
ブ名、失敗したときに停
止するかどうか等を設定。
パラメタもジョブに合わ
せたものが表示される
16
 いつまでも設定画面にスクリプトを書いておくのは保守性・可読性の面か
らBad Practice
 Jenkinsfileにまとめてバージョン管理する
Jenkinsfile
Jenkins2.0のPipeline入門
PathはJenkinsfileがデフォルトだが
他の名前でもOK
17
 Pipelineの中身
 ビルド・単体テスト⇒結合テスト⇒デプロイ の順で行う
 途中で失敗したら次へは進まない
 現在ジョブの中で書かれているようなビルド手順もPipeline Scriptに記載
する(ジョブを呼び出さない)手もある
 どちらを使うかは目的次第
 既存のジョブの中にワークフローっぽい設定が沢山あるなら置き換え
よう
単純にジョブを並べて呼び出すPipelineの例
Jenkins2.0のPipeline入門
stage 'Build & UnitTest'
build ’Build_UnitTest'
stage 'IntegrationTest'
build job: ’IntegrationTest', parameters: [[$class: 'StringParameterValue', name:
'BROWSER_NAME', value: 'htmlunit']]
stage 'Deploy'
build ’Deploy'
18
 GitHubにあるチュートリアルがお勧め
 https://github.com/jenkinsci/pipeline-
plugin/blob/master/TUTORIAL.md
 実践で使えるコマンド
手始めに勉強すると良いものたち
Jenkins2.0のPipeline入門
コマンド 内容
git Gitリポジトリからソースコードを取得
mail メール通知
input ユーザによる承認を待つ
parallel ジョブを並列実行(fork/joinができる)
retry ジョブが失敗した場合にリトライ
archive 成果物の保存
step([$class:
XXX…
任意のビルド手順を実行できる
JUnitResultArchiver(Junit結果の出力)、
CopyArtifact(成果物のコピー)等をよく使う
19
① 途中で手動操作を挟む自動テスト
 メール本文に書かれているURLをクリックすると先に進めるためのリンクが表
示されたコンソールを開くことができる
これまでに作ったPipelineの例
Jenkins2.0のPipeline入門
// 自動テスト
build ’AutomatedSeleniumTestBeforeOperation’
// メールを出して手動操作待ち
mail (to: ’jenkins@example.com',
subject: "Job 'AutomatedSeleniumTestBeforeOperation'
(${env.BUILD_NUMBER}) is waiting for input",
body: "Please complete your manual operation and go to
${env.BUILD_URL}/console/.");
input 'Ready to go?’;
// 自動テスト続き
build ‘AutomatedSeleniumTestAfterOperation’
20
② データ作成のためにひたすら処理を繰り返すスクリプト
 「FirstOperationが終わったらSecondOperationを実施する」という内容を
指定回数だけ繰り返す
これまでに作ったPipelineの例
Jenkins2.0のPipeline入門
for (int i = min; i < max; i ++) {
tasks[”${i}"] = {
try {
build job: ’FirstOperation',
parameters: [[$class: 'StringParameterValue',
name: ’param', value: ”${i}”]]
build job: ’SecondOperation’,
parameters: [[$class: 'StringParameterValue',
name: 'param', value: ”${i}”]]
} catch (e) {
failure = true
}
}
}
}
21
ご清聴ありがとうございました!!

第9回Jenkins勉強会 超簡単Pipeline講座