คุณจะรันขั้นตอน / ขั้นตอนการสร้างเฉพาะในกรณีที่สร้างสาขาเฉพาะได้อย่างไร
ตัวอย่างเช่นเรียกใช้ขั้นตอนการปรับใช้เฉพาะเมื่อมีการเรียกสาขาdeployment
โดยปล่อยให้ทุกอย่างเหมือนเดิม
คุณจะรันขั้นตอน / ขั้นตอนการสร้างเฉพาะในกรณีที่สร้างสาขาเฉพาะได้อย่างไร
ตัวอย่างเช่นเรียกใช้ขั้นตอนการปรับใช้เฉพาะเมื่อมีการเรียกสาขา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
สามารถตั้งค่าเพื่อหลีกเลี่ยงการหมุนเอเจนต์เพื่อรันเงื่อนไขหากเงื่อนไขไม่ต้องการสถานะคอมไพล์เพื่อตัดสินใจว่าจะรัน:
when { beforeAgent true; expression { return isStageConfigured(config) } }
อัปเดต
ใหม่เมื่อ Clause
REF: https://jenkins.io/blog/2018/04/09/whats-in-declarative
เท่ากับ - เปรียบเทียบค่าสองค่า - สตริงตัวแปรตัวเลขบูลีนและส่งกลับค่าจริงหากค่าเท่ากัน ฉันไม่แน่ใจจริงๆว่าเราพลาดการเพิ่มสิ่งนี้ไปก่อนหน้านี้ได้อย่างไร คุณสามารถทำการเปรียบเทียบแบบ "ไม่เท่ากับ" โดยใช้ชุดค่าผสม not {เท่ากับ ... } ได้เช่นกัน
changeRequest - ในรูปแบบที่ง่ายที่สุดสิ่งนี้จะคืนค่าเป็นจริงหากไปป์ไลน์นี้กำลังสร้างคำขอเปลี่ยนแปลงเช่นคำขอดึง GitHub นอกจากนี้คุณยังสามารถตรวจสอบรายละเอียดเพิ่มเติมกับคำขอเปลี่ยนแปลงได้โดยให้คุณถามว่า "นี่เป็นการร้องขอการเปลี่ยนแปลงกับสาขาหลักหรือไม่" และอื่น ๆ อีกมากมาย
buildingTag - เงื่อนไขง่ายๆที่ตรวจสอบว่าไปป์ไลน์กำลังทำงานกับแท็กใน SCM แทนที่จะเป็น branch หรือการอ้างอิงคอมมิตเฉพาะ
แท็ก - รายละเอียดที่เทียบเท่ากับ buildingTag ช่วยให้คุณสามารถตรวจสอบกับชื่อแท็กได้
when{}
เงื่อนไขจะประเมินว่าเป็นเท็จ :(
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'
}
}
}
}
}
}