ขั้นตอน / ขั้นตอนตามเงื่อนไขในไปป์ไลน์ Jenkins


96

คุณจะรันขั้นตอน / ขั้นตอนการสร้างเฉพาะในกรณีที่สร้างสาขาเฉพาะได้อย่างไร

ตัวอย่างเช่นเรียกใช้ขั้นตอนการปรับใช้เฉพาะเมื่อมีการเรียกสาขาdeploymentโดยปล่อยให้ทุกอย่างเหมือนเดิม

คำตอบ:


187

การทำเช่นเดียวกันในไวยากรณ์ไปป์ไลน์ที่เปิดเผยด้านล่างเป็นตัวอย่างบางส่วน:

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 ช่วยให้คุณสามารถตรวจสอบกับชื่อแท็กได้


1
ฉันสามารถใช้สิ่งนี้สำหรับการดำเนินการสร้างโพสต์ได้หรือไม่
Doug

1
ฉันพบว่าเจนกินส์หมุนตัวแทนที่ระบุแม้ว่าwhen{}เงื่อนไขจะประเมินว่าเป็นเท็จ :(
Trejkaz

1
@Trejkaz คุณสามารถใช้beforeAgent trueเพื่อหลีกเลี่ยงสิ่งนั้นได้แล้ว
Nick Jones

1
@NickJones แน่นอนbeforeAgentตอนนี้เป็นวิธีแก้ปัญหาสำหรับสิ่งนั้น
Trejkaz

47

เพียงใช้ifและenv.BRANCH_NAMEตัวอย่าง:

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

4
ควรจะก่อนขึ้นเวทีหรือหลัง?
Jet

5
ก่อนขึ้นเวทีเวทีสามารถอยู่ข้างในถ้าสาขา
Krzysztof Krasoń

อย่าคิดว่าตำแหน่งสำคัญจริงๆ
omu_negru

9
ฉันไม่สามารถทำงานนี้ด้วยไปป์ไลน์ที่เปิดเผยได้ สิ่งนี้ใช้ได้กับท่อที่เปิดเผยหรือไม่? เวิร์กโฟลว์สคริปต์: 9: คาดว่าจะมีสเตจ @ บรรทัดที่ 9 คอลัมน์ 9 ถ้า (env.BRANCH_NAME == "การปรับใช้") {เวิร์กโฟลว์สคริปต์: 8: ไม่ได้ระบุขั้นตอนที่บรรทัด 8 คอลัมน์ 5. ขั้นตอน {
pitchblack408

4
ใช้งานได้เฉพาะในไปป์ไลน์แบบสคริปต์เท่านั้น สำหรับไปป์ไลน์ที่เปิดเผยคุณควรใช้สคริปต์ {} ภายในขั้นตอน
Pedro Henrique

1

ตามคำตอบอื่น ๆ ฉันกำลังเพิ่มสถานการณ์ขั้นตอนคู่ขนาน:

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'
                    }
                }
            }
        }
    }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.