Bagaimana Anda menjalankan langkah / tahapan pembangunan hanya jika membangun cabang tertentu?
Misalnya, jalankan langkah penerapan hanya jika cabang dipanggil deployment
, biarkan yang lainnya tetap sama.
Jawaban:
Melakukan hal yang sama dalam sintaks pipeline deklaratif, berikut adalah beberapa contohnya:
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'
}
}
Cara yang lebih efektif muncul -
https://issues.jenkins-ci.org/browse/JENKINS-41187
Juga lihat -
https://jenkins.io/doc/book/pipeline/syntax/#when
Direktif beforeAgent true
dapat disetel untuk menghindari memutar agen untuk menjalankan kondisional, jika kondisional tidak memerlukan status git untuk memutuskan apakah akan dijalankan:
when { beforeAgent true; expression { return isStageConfigured(config) } }
UPDATE
Baru KETIKA Klausa
REF: https://jenkins.io/blog/2018/04/09/whats-in-declarative
sama dengan - Membandingkan dua nilai - string, variabel, angka, boolean - dan mengembalikan nilai benar jika sama. Sejujurnya saya tidak yakin bagaimana kami melewatkan menambahkan ini sebelumnya! Anda juga dapat melakukan perbandingan "tidak sama dengan" menggunakan kombinasi bukan {sama dengan ...}.
changeRequest - Dalam bentuk yang paling sederhana, ini akan mengembalikan nilai true jika Pipeline ini membuat permintaan perubahan, seperti pull request GitHub. Anda juga dapat melakukan pemeriksaan lebih rinci terhadap permintaan perubahan, memungkinkan Anda untuk bertanya "apakah ini permintaan perubahan terhadap cabang master?" dan banyak lagi.
buildingTag - Kondisi sederhana yang hanya memeriksa apakah Pipeline dijalankan terhadap tag di SCM, bukan cabang atau referensi komit tertentu.
tag - Persamaan yang lebih mendetail dari buildingTag, memungkinkan Anda memeriksa dengan nama tag itu sendiri.
when{}
kondisinya bernilai false. :(
beforeAgent true
untuk menghindari itu
beforeAgent
sekarang adalah solusi untuk itu.
Cukup gunakan if
dan env.BRANCH_NAME
, contoh:
if (env.BRANCH_NAME == "deployment") {
... do some build ...
} else {
... do something else ...
}
Menurut jawaban lain saya menambahkan skenario tahapan paralel:
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'
}
}
}
}
}
}