O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

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

11.441 visualizações

Publicada em

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

Publicada em: Tecnologia
  • Seja o primeiro a comentar

第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 ご清聴ありがとうございました!!

×