Bir derleme adımını / aşamasını yalnızca belirli bir şube oluştururken nasıl çalıştırırsınız?
Örneğin, yalnızca şube çağrılırsa deployment
diğer her şeyi aynı bırakarak bir dağıtım adımını çalıştırın .
Yanıtlar:
Bildirim temelli ardışık düzen söz diziminde aynısını yapmak, aşağıda birkaç örnek verilmiştir:
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'
}
}
Daha etkili yollar geliyor -
https://issues.jenkins-ci.org/browse/JENKINS-41187
Ayrıca bakın -
https://jenkins.io/doc/book/pipeline/syntax/#when
Yönerge beforeAgent true
, koşullu çalıştırılıp çalıştırılmayacağına karar vermek için git state'i gerektirmiyorsa, bir aracıyı koşullu çalıştıracak şekilde döndürmekten kaçınmak için ayarlanabilir:
when { beforeAgent true; expression { return isStageConfigured(config) } }
GÜNCELLEME
NE ZAMAN Madde
REF: https://jenkins.io/blog/2018/04/09/whats-in-declarative
eşittir - İki değeri karşılaştırır - dizeler, değişkenler, sayılar, mantıksallar - ve eşitlerse doğru döndürür. Bunu daha önce eklemeyi nasıl kaçırdığımızı dürüstçe bilmiyorum! Not {eşittir ...} kombinasyonunu kullanarak da "eşit değildir" karşılaştırmaları yapabilirsiniz.
changeRequest - En basit biçiminde, bu Ardışık Düzen GitHub çekme isteği gibi bir değişiklik isteği oluşturuyorsa bu, true değerini döndürür. Ayrıca, değişiklik talebine karşı daha ayrıntılı kontroller yapabilir ve "bu, ana şubeye karşı bir değişiklik talebi mi?" ve daha fazlası.
buildingTag - Pipeline'ın bir dal veya belirli bir commit referansı yerine SCM'deki bir etikete karşı çalışıp çalışmadığını kontrol eden basit bir koşul.
etiket - buildingTag'in daha ayrıntılı bir eşdeğeridir ve etiket adının kendisiyle karşılaştırmanızı sağlar.
when{}
Koşul yanlış olarak değerlendirilse bile Jenkins'in belirtilen aracıyı döndürdüğünü görüyorum . :(
beforeAgent true
kaçınmak için kullanabilirsiniz
beforeAgent
şimdi bunun için bir geçici çözüm.
Sadece if
ve env.BRANCH_NAME
, örneğin:
if (env.BRANCH_NAME == "deployment") {
... do some build ...
} else {
... do something else ...
}
Diğer cevaplara göre paralel aşamalar senaryosunu ekliyorum:
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'
}
}
}
}
}
}