web-dev-qa-db-ja.com

Jenkins Pipeline条件付きステップ/ステージ

特定のブランチの場合にのみ、ビルドステップ/ステージを実行する方法。

I.E.プルリクエスト/ブランチごとにすべてを実行しますが、ビルドするブランチの名前がdeploymentである場合、展開手順も実行しますか?

55
Devonte

宣言的なパイプライン構文で同じことを行うと、いくつかの例を以下に示します。

stage('master-branch-stuff'){
  agent any
  when{
    branch 'master'
  }
  steps {
    echo 'run this stage - ony if the branch = master branch'
  }
}
stage('feature-branch-stuff') {
    agent label:'test-node'
    when { branch "feature/*" }
    steps {
        echo 'run this stage - only if the branch name started with feature/'
    }
}
stage('expression-branch') {
    agent label:'some-node'
    when {
    expression {
        return env.BRANCH_NAME != 'master';
        }
    }
    steps {
        echo 'run this stage - when branch is not equal to master'
    }
}
stage('env-specific-stuff') {
    agent label:'test-node'
    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


UPDATE
新しいWHEN句
REF: https://jenkins.io/blog/2018/04/09/whats-in-declarative

等しい-2つの値(文字列、変数、数値、ブール値)を比較し、等しい場合はtrueを返します。正直に言うと、これを以前に追加するのを忘れていたのです! not {equals ...}の組み合わせも使用して、「等しくない」比較を行うことができます。

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

buildingTag-ブランチまたは特定のコミット参照ではなく、SCMのタグに対してPipelineが実行されているかどうかを確認するだけの単純な条件。

tag-buildingTagのより詳細な同等物。タグ名自体をチェックできます。

98
Chandan Nayak

ifenv.BRANCH_NAMEを使用するだけです。例:

    if (env.BRANCH_NAME == "deployment") {                                          
        ... do some build ...
    } else {                                   
        ... do something else ...
    }                                                                       
35