Làm thế nào để bạn chạy một bước / giai đoạn xây dựng chỉ khi xây dựng một nhánh cụ thể?
Ví dụ: chỉ chạy một bước triển khai khi nhánh được gọi deployment
, để lại mọi thứ khác như cũ.
Câu trả lời:
Thực hiện tương tự trong cú pháp đường ống khai báo, dưới đây là một số ví dụ:
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'
}
}
Sắp có những cách hiệu quả hơn -
https://issues.jenkins-ci.org/browse/JENKINS-41187
Cũng xem tại -
https://jenkins.io/doc/book/pipeline/syntax/#when
Chỉ thị beforeAgent true
có thể được đặt để tránh quay một tác nhân để chạy điều kiện, nếu điều kiện không yêu cầu trạng thái git để quyết định có chạy hay không:
when { beforeAgent true; expression { return isStageConfigured(config) } }
Phát hành bài đăng và tài liệu
CẬP NHẬT MỚI
KHI
ĐIỀU KHOẢN REF: https://jenkins.io/blog/2018/04/09/whats-in-decl Compare
bằng - So sánh hai giá trị - chuỗi, biến, số, boolean - và trả về true nếu chúng bằng nhau. Tôi thành thật không biết làm thế nào chúng tôi đã bỏ lỡ thêm điều này sớm hơn! Bạn cũng có thể thực hiện so sánh "không bằng" bằng cách sử dụng kết hợp not {bằng ...}.
changeRequest - Ở dạng đơn giản nhất, điều này sẽ trả về true nếu Pipeline này đang xây dựng một yêu cầu thay đổi, chẳng hạn như một yêu cầu kéo GitHub. Bạn cũng có thể kiểm tra chi tiết hơn đối với yêu cầu thay đổi, cho phép bạn hỏi "đây có phải là yêu cầu thay đổi đối với nhánh chính không?" và nhiều hơn nữa.
buildingTag - Một điều kiện đơn giản chỉ kiểm tra xem Pipeline có đang chạy với một thẻ trong SCM hay không, chứ không phải là một nhánh hoặc một tham chiếu cam kết cụ thể.
tag - Một tương đương chi tiết hơn của buildingTag, cho phép bạn kiểm tra chính tên thẻ.
when{}
điều kiện đánh giá là sai. :(
beforeAgent true
để tránh điều đó
beforeAgent
hiện là một giải pháp thay thế cho điều đó.
Chỉ cần sử dụng if
và env.BRANCH_NAME
, ví dụ:
if (env.BRANCH_NAME == "deployment") {
... do some build ...
} else {
... do something else ...
}
Theo các câu trả lời khác, tôi đang thêm kịch bản các giai đoạn song song:
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'
}
}
}
}
}
}