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.

[DO02] Jenkins PipelineとBlue Oceanによる、フルスクラッチからの継続的デリバリ

3,669 views

Published on

Jenkins は長らく継続的デリバリのためのツールとして使われてきましたが、Jenkins Pipeline によって全く新しい様々な可能性が開けました。この発表では、Jenkins Pipeline からスタートして、おもちゃでない実用に耐えうる継続的デリバリのパイプラインを構築します。Jenkins のもうひとつの新機能の目玉は、Jenkins の新しい UX である Blue Ocean です。この発表では、継続的デリバリのパイプラインを構築した後、Blue Ocean を使って開発者に迅速なフィードバックをもたらす様子を紹介します。

受講対象: 継続的インテグレーションや Jenkins にご興味をお持ちの方はぜひご参加ください。

製品/テクノロジ: DevOps/OSS

川口 耕介
CloudBees, Inc.
Chief Technology Officer

Published in: Technology
  • Be the first to comment

  • Be the first to like this

[DO02] Jenkins PipelineとBlue Oceanによる、フルスクラッチからの継続的デリバリ

  1. 1. Jenkins Pipeline + Blue Ocean フルスクラッチからの継続的デリバリ
  2. 2. 2© 2017 CloudBees, Inc. All Rights Reserved. 川口耕介とは • Jenkinsプロジェクトの父 • CloudBeesのCTO
  3. 3. 3© 2017 CloudBees, Inc. All Rights Reserved. 継続的デリバリとは Development Production Commit Build Test Stage Deploy Feedback Loop $ The Business
  4. 4. 4© 2017 CloudBees, Inc. All Rights Reserved. Software changes continuously deployed to live production Continuous Deployment Software changes continuously delivered to stakeholders in any environment Continuous Delivery Software changes continuously delivered to stakeholders in any environment Continuous DeliveryContinuous Integration Automated commit, build and testing of code in the development environment DevOps  Cultural approaches & technical practices User FeedbackRapid Changes Discipline AGILE An incremental approach to identifying, prioritizing, and coordinating feature development Development Production / Prod-like Live Production Env.Stage Release Deploy Monitor Upstream (left) Downstream (right) Define Plan Code Compile Build Unit Test Analyze Integrate Int. Test Package Place Load Test Acct. Test Change Mgt. Production Bugs なぜ継続的デリバリ?
  5. 5. 5© 2017 CloudBees, Inc. All Rights Reserved. Jenkins Pipeline • Pipeline as Code • 継続的デリバリのプロセスの定義を記述する • リポジトリにJenkinsfileとしてコミットする • jenkins.io/doc/book/pipeline
  6. 6. 6© 2017 CloudBees, Inc. All Rights Reserved. https://flic.kr/p/opw1JR Blue Ocean
  7. 7. 7© 2017 CloudBees, Inc. All Rights Reserved.
  8. 8. 8© 2017 CloudBees, Inc. All Rights Reserved.
  9. 9. 9© 2017 CloudBees, Inc. All Rights Reserved.
  10. 10. 10© 2017 CloudBees, Inc. All Rights Reserved.
  11. 11. 11© 2017 CloudBees, Inc. All Rights Reserved. kohsuke/jhipster-sample-app ツール • Maven • Node / Gulp • Gatling • Docker 本日の材料
  12. 12. パイプラインを設計
  13. 13. 13© 2017 CloudBees, Inc. All Rights Reserved. 開発者個別 • ビルド • 単体テスト • 静的解析 チーム全体 • ビルド • 単体テスト • 静的解析 QA環境 • デプロイ • 性能テスト 本番環境 • デプロイ パイプラインを設計
  14. 14. 14© 2017 CloudBees, Inc. All Rights Reserved. ブランチ戦略を設計 master qa production
  15. 15. 15© 2017 CloudBees, Inc. All Rights Reserved. docker run -p 8080:8080 –u root ¥ -v /var/run/docker.sock:/var/run/docker.sock ¥ -v $PWD/jenkins_home:/var/jenkins_home jenkinsci/blueocean Jenkins + Blue Oceanを起動
  16. 16. 16© 2017 CloudBees, Inc. All Rights Reserved.
  17. 17. 17© 2017 CloudBees, Inc. All Rights Reserved.
  18. 18. ビルド
  19. 19. 19© 2017 CloudBees, Inc. All Rights Reserved. • Jenkins Pipelineはビルドシステムではない! • 既存のビルドシステムを他とくっつける糊のようなもの • ゴール • 再現性のあるポータブルなビルド • バイナリを作って後のために保存 • 今回はMavenを使います ビルド
  20. 20. 20© 2017 CloudBees, Inc. All Rights Reserved. pipeline { agent any stages { stage('Build') { steps { sh 'mvn' } } } } ビルド
  21. 21. 21© 2017 CloudBees, Inc. All Rights Reserved. stage('Build') { agent { docker { image 'maven:3-alpine' } } /* .. */ } ビルド
  22. 22. 22© 2017 CloudBees, Inc. All Rights Reserved. stage('Build') { agent ... steps { sh 'mvn clean install' archiveArtifacts 'target/*.war' junit 'target/surefire-reports/*.xml' } } ビルド
  23. 23. 23© 2017 CloudBees, Inc. All Rights Reserved. stage('Build') { /* .. */ steps { withMaven { sh 'mvn clean package' } } } プラグインを使って頻出パターンを簡略化
  24. 24. 24© 2017 CloudBees, Inc. All Rights Reserved. stage('Build') { /* .. */ steps { withMaven(mavenSettingsConfig:'my-maven-settings') { sh 'mvn clean package' } } } CIビルド環境に適応
  25. 25. 単体テスト
  26. 26. 26© 2017 CloudBees, Inc. All Rights Reserved. stage('Frontend Test') { agent { docker 'node:alpine' } steps { sh 'yarn install' sh 'yarn global add gulp-cli' sh 'gulp test' } } フロントエンドの単体テスト
  27. 27. 27© 2017 CloudBees, Inc. All Rights Reserved. stage('Frontend Test') { agent { docker 'node:alpine' } steps { sh 'yarn install' sh 'yarn global add gulp-cli' sh 'gulp test' junit 'target/test-results/karma/*.xml' } } 結果の捕捉
  28. 28. 静的解析
  29. 29. 29© 2017 CloudBees, Inc. All Rights Reserved. いろいろなオプションがある • FindBugs • PMD • Checkstyle • … SonarQube? • jenkins.io/blog/2017/04/18/continuousdelivery-devops-sonarqube/ 静的解析
  30. 30. 30© 2017 CloudBees, Inc. All Rights Reserved. pipeline { agent any stages { stage('Analyze') { agent ... steps { withMaven { sh 'mvn pmd:pmd' pmd pattern:'target/pmd.xml' } } } } } PMDの例
  31. 31. QA環境
  32. 32. 32© 2017 CloudBees, Inc. All Rights Reserved. 開発者個別 • ビルド • 単体テスト • 静的解析 チーム全体 • ビルド • 単体テスト • 静的解析 QA環境 • デプロイ • 性能テスト 本番環境 • デプロイ パイプラインの設計
  33. 33. 33© 2017 CloudBees, Inc. All Rights Reserved. • Jenkins Pipelineはデプロイメント・システムではない! • 既存のデプロイメント・システムを他とくっつける糊のようなもの • 所変われば… • AWS/Azure • Chef/Puppet • アップストアへ登録 • 社内サーバにアップロード デプロイ
  34. 34. 34© 2017 CloudBees, Inc. All Rights Reserved. pipeline { agent any stages { stage('Deploy to QA') { steps { sh './deploy.sh' } } } } デプロイ
  35. 35. 35© 2017 CloudBees, Inc. All Rights Reserved. pipeline { agent any stages { stage('Deploy to QA') { when { branch 'qa' } steps { sh './deploy.sh' } } } } qaブランチのみで実行
  36. 36. 本番環境
  37. 37. 37© 2017 CloudBees, Inc. All Rights Reserved. 開発者個別 • ビルド • 単体テスト • 静的解析 チーム全体 • ビルド • 単体テスト • 静的解析 QA環境 • デプロイ • 性能テスト 本番環境 • デプロイ パイプラインの設計
  38. 38. 38© 2017 CloudBees, Inc. All Rights Reserved. stage(‘Deploy to Production') { steps { input message: 'Deploy to production?', ok: 'Fire zee missiles!' sh './deploy.sh prod' } } 確認
  39. 39. 39© 2017 CloudBees, Inc. All Rights Reserved. 確認
  40. 40. これで完成?
  41. 41. 41© 2017 CloudBees, Inc. All Rights Reserved. • 継続的デリバリの実現には開発者へのフィードバックが欠かせない • パイプラインを使って • メールを送る • HipChat/Slack通知 • JIRAチケットの更新 • jenkins.io/node/tags/notifications/ フィードバックループを作る
  42. 42. Q & A
  43. 43. 43© 2017 CloudBees, Inc. All Rights Reserved. jenkins.io/doc/book/pipeline jenkins.io/projects/blueocean Docker コンテナ • jenkinsci/jenkins:lts-alpine • jenkinsci/blueocean jenkinsci-users@googlegroups.com 資料

×