第9回jenkins勉強会 超簡単pipeline講座

21
1 超超超 Pipeline 超超 2016/08/10 超 9 超 Jenkins 超超超 玉玉玉玉 /@nkns165

Upload: hiroko-tamagawa

Post on 06-Jan-2017

2.958 views

Category:

Technology


0 download

TRANSCRIPT

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

1

超簡単 Pipeline 講座

2016/08/10  第 9 回 Jenkins 勉強会

玉川紘子 /@nkns165

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

2

自己紹介 Pipeline 概説 Jenkins2.0 の Pipeline 入門

※ 本当に入門しか喋りません。

AGENDA

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

3

自己紹介 Pipeline 概説 Jenkins2.0 の Pipeline 入門

※ 本当に入門しか喋りません。

AGENDA

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

4

自己紹介

名前:玉川 紘子( @nkns165 )所属:株式会社 SHIFT  ソフトウェアテスト事業本部   技術開発部コミュニティ: STAR (テスト自動化研究会)       日本 Jenkins ユーザ会

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

5

CI ・自動テストなんでも屋さんとして活動中

メイン業務は CI ・自動テストに関するなんでもサポート屋Jenkins に関するセミナー、書籍のお手伝いなども

運用方針の提案 実際に稼働する CI 環境の構築 テストの書き方指南

Jenkins ってどうやって使えばいいんだっけ?

Selenium でテストを書いてみたい

んだけど…

付録で参加付録で参加

監訳で参加

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

6

資格も取ってみました。

2016 年 5 月より運用開始 プロメトリックのテストセンターで東京でも受験可能

ただし、受験指示から問題・回答まですべて英語

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

7

自己紹介 Pipeline 概説 Jenkins2.0 の Pipeline 入門

※ 本当に入門しか喋りません。

AGENDA

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

8

こういうのとか

こういうのとか

Jenkins で「何らかのワークフロー」を書きたいという欲求

Pipeline 概説

成功したときだけ次に行きます

成果物やパラメタを次のジョブに渡します

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

9

「 GUI で気軽に設定できるのが Jenkins の魅力!」だけど…?

そのためのプラグインたち

Pipeline 概説

Join PluginParameterized Trigger Plugin

Build Pipeline PluginPromoted Builds Plugin

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

10

いちいち GUI で設定するの面倒くさい(> <)

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

11

そこで Pipeline

Pipeline 概説

Pipeline Plugin Groovy のスクリプトでワークフローを記述可能 Jenkins2.0 から公式に押され始めたワークフロー管理系のデファクト 2014 年末頃に「 Workflow Plugin 」としてリリース

ワークフローの可視化機能は有償 2016 年 1 月から「 Pipeline Plugin 」に改名、 2 月に可視化機能が OSS 化

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

12

Pipeline Plugin (= Pipeline as Code ) を使うメリット

Pipeline 概説

保守性の高さ テキストファイルでスクリプトを記述 ⇒ 読みやすい! バージョン管理 ⇒ 変更を把握し、意図をつかみやすい!

対応範囲の広さ Groovy スクリプトという 1 つの形式で様々なワークフローを記述可能

⇒  いろんなプラグイン覚えなくていい!

可読性の高さ 内部関数の定義も可能 ⇒ 大規模化しても大丈夫!

安全性 Jenkins を再起動しても resume (できる内容に制限はある)

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

13

自己紹介 Pipeline 概説 Jenkins2.0 の Pipeline 入門

※ 本当に入門しか喋りません。

AGENDA

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

14

新規ジョブ作成で「 Pipeline 」を選択 実行したい内容を Groovy のスクリプトとして記述

Pipeline の作成方法

Jenkins2.0 の Pipeline 入門

Pipeline の内容(ここでは、サンプルとして用意されている文字列出力のみ

の簡単なもの)

記法を覚えていなくても簡単にスクリプトを生成するための

機能(次頁)

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

15

「 Sample Step 」から機能を選択 機能に合わせたパラメタを設定 「 Generate Groovy 」で生成されたスクリプトを貼り付ける

Pipeline SyntaxJenkins2.0 の Pipeline 入門

ジョブのビルド以外にも文字列出力、

ソースコード取得、メール等様々

これを前頁のエディタに貼り付ける

ジョブのビルドではジョブ名、失敗したときに停止するかどうか等を設

定。パラメタもジョブに合わせたものが表示される

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

16

いつまでも設定画面にスクリプトを書いておくのは保守性・可読性の面から Bad Practice

Jenkinsfile にまとめてバージョン管理する

JenkinsfileJenkins2.0 の Pipeline 入門

Path は Jenkinsfile がデフォルトだが

他の名前でも OK

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

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'

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

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( 成果物のコピー )等をよく使う

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

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’

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

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 } } }}

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

21

ご清聴ありがとうございました!!