Jenkins işlem hattında koşullu adım / aşama


96

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 deploymentdiğer her şeyi aynı bırakarak bir dağıtım adımını çalıştırın .

Yanıtlar:


188

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) } }

Yayın yayını ve dokümanlar


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.


1
bunu post build eylemleri için kullanabilir miyim?
Doug

1
when{}Koşul yanlış olarak değerlendirilse bile Jenkins'in belirtilen aracıyı döndürdüğünü görüyorum . :(
Trejkaz

1
@Trejkaz artık bundan beforeAgent truekaçınmak için kullanabilirsiniz
Nick Jones

1
@NickJones gerçekten, beforeAgentşimdi bunun için bir geçici çözüm.
Trejkaz

47

Sadece ifve env.BRANCH_NAME, örneğin:

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

4
sahneden önce mi yoksa sonra mı olmalı?
Jet

5
Sahneye önce, aşamaları dalları eğer içeride olabilir
Krzysztof Krasoń

yerleşimin gerçekten önemli olduğunu düşünmeyin
omu_negru

9
Bu işi bildirimsel bir ardışık düzen ile elde edemem Bu bildirimsel ardışık düzenlerle çalışır mı? WorkflowScript: 9: Beklenen bir sahne @ hattı 9, (env.BRANCH_NAME == "dağıtım") {WorkflowScript, sütun 9.: 8: Resim hattı 8 @ belirtilen kademeleri, kolon 5. aşamaları {
pitchblack408

4
bu yalnızca komut dosyalı ardışık düzenlerde çalışır. bildirim temelli ardışık düzenler için, adımın içinde {} komut dosyasını kullanmalısınız.
Pedro Henrique

1

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'
                    }
                }
            }
        }
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.