특정 브랜치를 빌드하는 경우에만 빌드 단계 / 단계를 어떻게 실행합니까?
예를 들어 분기가 호출 된 경우에만 배포 단계를 실행하고 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
조건부 실행 여부를 결정하는 데 git 상태가 필요하지 않은 경우 조건부 실행을 위해 에이전트 회전을 방지하도록 지시문 을 설정할 수 있습니다.
when { beforeAgent true; expression { return isStageConfigured(config) } }
새로운 WHEN 조항
REF 업데이트 : https://jenkins.io/blog/2018/04/09/whats-in-declarative
같음-두 값 (문자열, 변수, 숫자, 부울)을 비교하고 같으면 true를 반환합니다. 나는 솔직히 우리가 이것을 더 일찍 추가하는 것을 어떻게 놓쳤는 지 잘 모르겠습니다! not {equals ...} 조합을 사용하여 "not equals"비교를 수행 할 수도 있습니다.
changeRequest-가장 간단한 형식으로이 파이프 라인이 GitHub 풀 요청과 같은 변경 요청을 빌드하는 경우 true를 반환합니다. 또한 "마스터 브랜치에 대한 변경 요청입니까?"라고 질문 할 수 있도록 변경 요청에 대해 더 자세한 검사를 수행 할 수도 있습니다. 그리고 훨씬 더.
buildingTag-파이프 라인이 브랜치 나 특정 커밋 참조가 아닌 SCM의 태그에 대해 실행 중인지 확인하는 간단한 조건입니다.
tag-태그 이름 자체를 확인할 수 있도록하는 buildingTag에 해당하는 더 자세한 내용입니다.
when{}
조건이 거짓으로 평가 되더라도 Jenkins가 지정된 에이전트를 회전시킵니다 . :(
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'
}
}
}
}
}
}