Jenkinsfileで次のようなものを指定するにはどうすればよいですか?
xではないブランチの場合
次のようなブランチ固有のタスクを指定する方法を知っています。
stage('Master Branch Tasks') {
when {
branch "master"
}
steps {
sh '''#!/bin/bash -l
Do some stuff here
'''
}
}
ただし、次のようにブランチがマスターまたはステージングでない場合のステージを指定したいと思います。
stage('Example') {
if (env.BRANCH_NAME != 'master' && env.BRANCH_NAME != 'staging') {
echo 'This is not master or staging'
} else {
echo 'things and stuff'
}
}
ただし、上記は機能せず、次のエラーで失敗します。
WorkflowScript: 62: Not a valid stage section definition: "if
WorkflowScript: 62: Nothing to execute within stage "Example"
失敗した試行のソースに注意してください: https://jenkins.io/doc/book/pipeline/syntax/#flow-control
これで issue が解決され、これを行うことができます:
stage('Example (Not master)') {
when {
not {
branch 'master'
}
}
steps {
sh 'do-non-master.sh'
}
}
anyOf
を使用して、複数の条件(この場合はブランチ名)を指定することもできます。
stage('Example (Not master nor staging)') {
when {
not {
anyOf {
branch 'master';
branch 'staging'
}
}
}
steps {
sh 'do-non-master-nor-staging.sh'
}
}
この場合 do-non-master-nor-staging.sh
は、すべてのブランチで実行されますexceptonmasterおよびstaging。
組み込み条件と一般的なパイプライン構文について読むことができます here 。
投稿からのリンクは、スクリプト化されたパイプライン構文の例を示しています。コードは宣言型パイプライン構文を使用します。宣言内でスクリプトパイプラインを使用するには、スクリプトステップを使用できます。
stage('Example') {
steps {
script {
if (env.BRANCH_NAME != 'master' && env.BRANCH_NAME != 'staging') {
echo 'This is not master or staging'
} else {
echo 'things and stuff'
}
}
}
}