対象読者
- Jenkins Pipeline初心者向け
- Pipelineの仕組みもそこまで深く理解していない方向け
背景
最近ようやっとJenkinsジョブをコード管理せねばと思い立って、Webコンソールに直書きしていたジョブたちをコードに起こす作業に取り掛かりました。
既存のジョブではシェルの実行結果を次のシェルや後続のジョブへ引き回すために、EnvInject Pluginを用いて環境変数のインジェクトをよく行なっていました。
ところがPipelineになるとこれまで通り「テキストファイルに値を書き込んでその値をインジェクトする」使い方が見つけられなかったため、他の方法がないかと試行錯誤したところ、stage間でシェルの実行結果を引き回せることに気付いたのでここに記します。
サンプルコード
こちらのコードでは、Androidアプリをビルドした後にそのアプリの情報をbuild.gradleファイルから引っ張り出して、その値を次のstageで利用するサンプルになっています。
(ビルドのシェルは省略しています。)
サンプルコード
pipeline {
stages {
stage('Build App') {
steps {
sh'''
# Androidアプリのビルド
'''
}
}
stage('Read App Info') {
steps {
script {
MIN_SDK_VERSION = sh(script: "cat mobile/build.gradle | grep \"minSdkVersion\" | sed -e \"s/[^0-9]//g\"", returnStdout: true)
TARGET_SDK_VERSION = sh(script: "cat mobile/build.gradle | grep \"targetSdkVersion\" | sed -e \"s/[^0-9]//g\"", returnStdout: true)
COMPILE_SDK_VERSION = sh(script: "cat mobile/build.gradle | grep \"compileSdkVersion\" | sed -e \"s/[^0-9]//g\"", returnStdout: true)
BUILD_TOOLS_VERSION = sh(script: "cat mobile/build.gradle | grep \"buildToolsVersion\" | grep -o -E \"[0-9]+.[0-9]+.[0-9]+\"", returnStdout: true)
}
}
}
stage('Print App Info') {
steps {
script {
print MIN_SDK_VERSION
print TARGET_SDK_VERSION
print COMPILE_SDK_VERSION
print BUILD_TOOLS_VERSION
}
}
}
}
}
実行結果
[Pipeline] echo
19
[Pipeline] echo
27
[Pipeline] echo
27
[Pipeline] echo
27.0.3
Read App Info
のscriptで生成した変数が次のstageであるPrint App Info
にも引き回せました。