1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Jenkinsfileでexit codeでビルドステータス分けたい

Posted at

前提

  • 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'
}
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?