特定のブランチをビルドする場合にのみ、ビルドステップ/ステージをどのように実行しますか?
たとえば、ブランチが呼び出された場合にのみ展開ステップを実行し、deployment
他のすべては同じままにします。
回答:
宣言型パイプライン構文で同じことを行うと、以下にいくつかの例があります。
stage('master-branch-stuff'){
agent any
when{
branch 'master'
}
steps {
echo 'run this stage - ony if the branch = master branch'
}
}
<b
stage('feature-branch-stuff') {
agent label:'test-node'
when { branch "feature/*" }
steps {
echo 'run this stage - only if the branch name started with feature/'
}
}
<b
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'
}
}
<b
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
beforeAgent true
条件が実行するかどうかを決定するためにgit状態を必要としない場合、ディレクティブを設定して、条件を実行するためにエージェントが起動しないようにすることができます。
when { beforeAgent true; expression { return isStageConfigured(config) } }
新しいWHEN句の更新
REF:https://jenkins.io/blog/2018/04/09/whats-in-declarative
equals-2つの値(文字列、変数、数値、ブール値)を比較し、それらが等しい場合はtrueを返します。正直なところ、これを以前に追加できなかった理由はわかりません。not {equals ...}の組み合わせを使用して、「等しくない」比較を行うこともできます。
changeRequest-最も単純な形式では、このパイプラインがGitHubプルリクエストなどの変更リクエストを作成している場合、これはtrueを返します。また、変更要求に対してより詳細なチェックを実行して、「これはマスターブランチに対する変更要求ですか?」と尋ねることができます。とはるかに。
buildingTag-ブランチや特定のコミット参照ではなく、パイプラインがSCMのタグに対して実行されているかどうかを確認するだけの単純な条件。
tag-buildingTagと同等の詳細な機能で、タグ名自体と照合できます。
when{}
条件がfalseと評価された場合でも、Jenkinsが指定されたエージェントをスピンアップすることがわかりました。:(
beforeAgent true
ことを避けるために
beforeAgent
そのための回避策になりました。
if
とenv.BRANCH_NAME
、例を使用するだけです。
if (env.BRANCH_NAME == "deployment") {
... do some build ...
} else {
... do something else ...
}
他の回答によると、私は並列ステージのシナリオを追加しています:
pipeline {
agent any
stages {
stage('some parallel stage') {
parallel {
stage('parallel stage 1') {
when {
expression { ENV == "something" }
}
steps {
echo 'something'
}
}
stage('parallel stage 2') {
steps {
echo 'something'
}
}
}
}
}
}