1. ホーム
  2. jenkins

[解決済み] Jenkinsパイプラインの条件付きステップ/ステージ

2022-08-03 02:46:33

質問

特定のブランチをビルドするときだけ、ビルドステップを実行するにはどうしたらよいですか?

例えば、デプロイメントステップを実行するのは、そのブランチが deployment というブランチの場合のみデプロイメントステップを実行し、他のすべては同じままにしておきます。

どのように解決するのですか?

宣言的パイプラインの構文で同じことをすると、以下のような例があります。

stage('master-branch-stuff') {
    when {
        branch 'master'
    }
    steps {
        echo 'run this stage - ony if the branch = master branch'
    }
}


stage('feature-branch-stuff') {
    when {
        branch 'feature/*'
    }
    steps {
        echo 'run this stage - only if the branch name started with feature/'
    }
}


stage('expression-branch') {
    when {
        expression {
            return env.BRANCH_NAME != 'master';
        }
    }
    steps {
        echo 'run this stage - when branch is not equal to master'
    }
}


stage('env-specific-stuff') {
    when { 
        environment name: 'NAME', value: 'this' 
    }
    steps {
        echo 'run this stage - only if the env name and value matches'
    }
}

もっと効果的な方法があります。 https://issues.jenkins-ci.org/browse/JENKINS-41187

も見てください - https://jenkins.io/doc/book/pipeline/syntax/#when


ディレクティブは beforeAgent true を設定することで、条件を実行するためにエージェントを起動することを回避することができます。

when { beforeAgent true; expression { return isStageConfigured(config) } }

リリースポスト ドキュメント


アップデイト

新しいWHEN句

REF: https://jenkins.io/blog/2018/04/09/whats-in-declarative

<ブロッククオート

equals - 2つの値(文字列、変数、数値、ブール値)を比較し、等しければ真を返す。 を比較し、等しい場合に true を返します。正直なところ、どうしてこれを以前 を見逃したのか、正直わからない。を使用して、quot;not equals" 比較を行うことができます。 {等しい... の組み合わせでもできます。

changeRequest - 最も単純な形として、このパイプラインが GitHub のプルリクエストのような変更要求を作成している場合に true を返します。 パイプラインが GitHub のプルリクエストのような変更要求を構築している場合に true を返します。 また、変更要求に対してより詳細なチェックを行うこともできます。 これは master ブランチに対する変更要求なのか? ブランチに対する変更要求なのか?" などと尋ねることができます。

buildingTag - SCM のタグに対してパイプラインが実行されているかどうかをチェックするだけのシンプルな条件です。 ブランチや特定のコミット参照ではなく、SCM のタグに対してパイプラインが実行されているかどうかをチェックするシンプルな条件です。 に対して実行されているかどうかをチェックします。

tag - buildingTag と同等で、より詳細なチェックが可能です。 タグの名前そのものに対してチェックすることができます。