この記事は 『CRESCO Advent Calendar 2017』 9日目の記事です。
VPA関連を書こうと思ったけれど、他の人と被りまくりそうな気がするので回避。
「ねえGoogle、Jenkins2から登場したPipelineを試してみて」
「Alexa、Jenkins2から登場したJenkinsFileも試してみて」
ちなみにこの記事内容は、APIやPipelineの内容考えるところから含めて8時間くらい費やし、完成には至らず。
もっと時間を作れれば良かった。。。計画性のなさを反省。
Jenkins install
まずはJenkinsをインストール Jenkins
Jenkins2より追加されたBlue Oceanも使ってみた
Easy!! Cool!!
Pipelineを登録してBlue Oceanで見るとこんな感じ。
その1: PipelineをGitHub Repository管理
まずは”JenkinsのJobで実行するPipelineをGitHub Repository管理”を試してみた。
今回はRestなAPIのアプリをテストしてビルドしてデプロイするPipelineを作成(したかった)。
REST API application(Chocolate Factory)
Chocolateの材料を渡すと”success”と返却するAPI
Spring Initializrでapplication作ってSwaggerFoxでAPI仕様を生成
Pipeline Flow(テストしてビルドしてデプロイする)
Jenkins Jobの設定などは、ググるといい感じの記事がたくさん出てきた。(ページ下部のReferencesをご覧ください)
完成形のPipelineはこちら。
実行中はこんな感じ。
実際のPipelineの内容はこちら。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
def gitUrl = "https://github.com/c417-jenkins/chocolate-factory.git" def targetBranch = "master" node { stage("checkout git") { dir("${WORKSPACE}") { git url: "${gitUrl}", branch: "${targetBranch}", credentialsId: "${ChocolateJenkins}" sh "ls -la" } } stage("Lint") { dir("${WORKSPACE}") { println("TODO: Add lint") } } stage("Unit Test") { dir("${WORKSPACE}") { withMaven( maven: "M3") { sh "mvn test" } } } stage("build") { dir("${WORKSPACE}") { withMaven( maven: "M3") { sh "mvn install" } } } stage("Integration Test") { dir("${WORKSPACE}") { println("TODO: integration test") } } stage("deploy") { println("deploy delicious chocolate!!") } } |
トリッキーなことをしない限り大抵の書き方が、ネットの至る所に転がっている。ありがたい。
ただ、ご覧の通り・・・Stage内容は実装時間が足りなかった。。きっとクリスマスまでには出来ているはず!!
その2: 対象ソースのGitHub Repository内でPipelineをJenkinsFile管理
GitHub Repository(今回はChocolate FactoryのRepository)に JenkinsFile
を配置すると、JenkinsさんがPipelineを実行してくれる。
Pipelineの内容はほぼ同じで実施。Pipelineの挙動はもちろん同じ。
ちなみにBlue OceanでPipelineを作成すると超簡単!フローに沿って進めるとあっという間にJenkinsFileを作ってくれた。
二つのPipelineを試してみて感じたこと
JenkinsFileは超簡単で感動、ソースと共に管理できるって素晴らしい。そしてBlue Oceanイケてる。
また、PipelineをGitHub Repositoryに集約することで、stageの内容をmodule化して使い回せる。
実際にプロジェクトで使うとしたら、、
- ブランチ戦略と合わせてJenkinsFileのPipeline作成
- リリースのCI/CDはGitHub Repository管理して使いまわす
- stageのバリエーションを増やすことで必要なstageが可視化され、対象に合わせたstageの実施スコープを網羅できそう
おわりに
改めて自身のプロジェクトのCI/CDを見直ししたくなった。
JenkinsFileでどこまでやるか、Pipelineで実現できることはもっとないか、
そもそも今のプロジェクトに適したPipelineを作れているか、、
もっとjenkins2を使いこなしたい!
そしておいしいチョコレートを皆さんにデプロイできるその日までお楽しみに!
This GitHub Repository
今回のソースコードはこちら。
Groovyで書いたPipeline chocolate-pipeline
Chocolate Application chocolate-factory
References
参考にさせていただいた記事はこちら。
Jenkinsの設定を最小限でJenkinsfile(Pipeline)を使う