Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

9,823 views

Published on

2016/08/10のJenkins勉強会でお話したスライドです。

Published in: Technology
  • Be the first to comment

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

  1. 1. 1 超簡単Pipeline講座 2016/08/10 第9回Jenkins勉強会 玉川紘子/@nkns165
  2. 2. 2  自己紹介  Pipeline概説  Jenkins2.0のPipeline入門  ※本当に入門しか喋りません。 AGENDA
  3. 3. 3  自己紹介  Pipeline概説  Jenkins2.0のPipeline入門  ※本当に入門しか喋りません。 AGENDA
  4. 4. 4 自己紹介 名前:玉川 紘子(@nkns165) 所属:株式会社SHIFT ソフトウェアテスト事業本部 技術開発部 コミュニティ:STAR(テスト自動化研究会) 日本Jenkinsユーザ会
  5. 5. 5 CI・自動テストなんでも屋さんとして活動中 メイン業務はCI・自動テストに関するなんでもサポート屋 Jenkinsに関するセミナー、書籍のお手伝いなども  運用方針の提案  実際に稼働するCI環境の構築  テストの書き方指南 Jenkinsってどうやって 使えばいいんだっけ? Seleniumで テストを書いてみたい んだけど…
  6. 6. 6 資格も取ってみました。  2016年5月より運用開始  プロメトリックのテストセンターで東京でも受験可能  ただし、受験指示から問題・回答まですべて英語
  7. 7. 7  自己紹介  Pipeline概説  Jenkins2.0のPipeline入門  ※本当に入門しか喋りません。 AGENDA
  8. 8. 8  こういうのとか  こういうのとか Jenkinsで「何らかのワークフロー」 を書きたいという欲求 Pipeline概説 成功したときだけ 次に行きます 成果物やパラメタを 次のジョブに渡します
  9. 9. 9 「GUIで気軽に設定できるのがJenkinsの魅力!」 だけど…? そのためのプラグインたち Pipeline概説 Join PluginParameterized Trigger Plugin Build Pipeline Plugin Promoted Builds Plugin …
  10. 10. 10 いちいちGUIで設定するの面倒くさい (> <)
  11. 11. 11 そこでPipeline Pipeline概説  Pipeline Plugin  Groovyのスクリプトでワークフローを記述可能  Jenkins2.0から公式に押され始めたワークフロー管理系のデファクト  2014年末頃に「Workflow Plugin」としてリリース  ワークフローの可視化機能は有償  2016年1月から「Pipeline Plugin」に改名、2月に可視化機能がOSS化
  12. 12. 12 Pipeline Plugin(=Pipeline as Code) を使うメリット Pipeline概説  保守性の高さ  テキストファイルでスクリプトを記述 ⇒ 読みやすい!  バージョン管理 ⇒ 変更を把握し、意図をつかみやすい!  対応範囲の広さ  Groovyスクリプトという1つの形式で様々なワークフローを記述可 能 ⇒ いろんなプラグイン覚えなくていい!  可読性の高さ  内部関数の定義も可能 ⇒ 大規模化しても大丈夫!  安全性  Jenkinsを再起動してもresume(できる内容に制限はある)
  13. 13. 13  自己紹介  Pipeline概説  Jenkins2.0のPipeline入門  ※本当に入門しか喋りません。 AGENDA
  14. 14. 14  新規ジョブ作成で「Pipeline」を選択  実行したい内容をGroovyのスクリプトとして記述 Pipelineの作成方法 Jenkins2.0のPipeline入門 Pipelineの内容 (ここでは、サンプ ルとして用意されて いる文字列出力のみ の簡単なもの) 記法を覚えていなく ても簡単にスクリプ トを生成するための 機能 (次頁)
  15. 15. 15  「Sample Step」から機能を選択  機能に合わせたパラメタを設定  「Generate Groovy」で生成されたスクリプトを貼り付ける Pipeline Syntax Jenkins2.0のPipeline入門 ジョブのビルド以外にも文字列出力、 ソースコード取得、メール等様々 これを前頁の エディタに貼り付ける ジョブのビルドではジョ ブ名、失敗したときに停 止するかどうか等を設定。 パラメタもジョブに合わ せたものが表示される
  16. 16. 16  いつまでも設定画面にスクリプトを書いておくのは保守性・可読性の面か らBad Practice  Jenkinsfileにまとめてバージョン管理する Jenkinsfile Jenkins2.0のPipeline入門 PathはJenkinsfileがデフォルトだが 他の名前でもOK
  17. 17. 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. 18. 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. 19. 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. 20. 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. 21. 21 ご清聴ありがとうございました!!

×