前提
- Jenkinsfileが使えるJenkins
- Scripted PipelineじゃなくてDeclarative Pipelineで使いたい
- try~catchだとerrorのcode全部掴んじゃうので使えない
サマリ
- scriptで囲って
def ret = sh(...)
とかで取れる - scriptで囲われた中ならifで何かとかやれるようだった
やり方
こんな感じに書こう
pipeline {
agent any
stages {
stage('Hello') {
steps {
script {
def ret = sh(
returnStatus: true,
script: 'exit 100'
)
echo "test: ${ret}"
if ("${ret}" == "100") {
currentBuild.result = 'UNSTABLE'
}
}
}
}
stage('next') {
steps {
sh 'echo next no hoge'
}
}
}
}
ちょっと説明
例えばシェル実行の場合はreturnStatus: true
のようにすることで、
exit codeが0以外の場合でもそこで止まらなくできるようにできる模様。
こう書くことでretにexit codeが代入されて、後続で${ret}
という形で利用できる。
(returnStatus
以外にもreturnStdout
という標準出力を返すようにすることもできるっぽい)
def ret = sh(
returnStatus: true,
script: 'exit 100'
)
値を利用する場合は下記のように、"${ret}"
といった文字列代入の形で利用しないと文法エラーになってしまった。
理由は追いかけていないが特殊文字系はクォートでくくらないと誤った判定にされてしまうからとかなのかもしれない。
if ("${ret}" == "100") {
currentBuild.result = 'UNSTABLE'
}