この記事は 『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の内容はこちら。

chocolate_pipeline.groovy
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