第9回jenkins勉強会 超簡単pipeline講座
TRANSCRIPT
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 PluginPromoted 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 SyntaxJenkins2.0 の Pipeline 入門
ジョブのビルド以外にも文字列出力、
ソースコード取得、メール等様々
これを前頁のエディタに貼り付ける
ジョブのビルドではジョブ名、失敗したときに停止するかどうか等を設
定。パラメタもジョブに合わせたものが表示される
16
いつまでも設定画面にスクリプトを書いておくのは保守性・可読性の面から Bad Practice
Jenkinsfile にまとめてバージョン管理する
JenkinsfileJenkins2.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: ’[email protected]', 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
ご清聴ありがとうございました!!