Pipeline 플러그인으로 Jenkins 2를 실행하고 있습니다. 각 분기 (마스터, 개발 등)에 Jenkinsfile이 루트에있는 다중 분기 파이프 라인 프로젝트를 설정했습니다. 설정은 간단했습니다. 그러나 코드가 변경되지 않더라도 각 분기를 주기적으로 (분기 인덱싱이 아닌) 실행하는 방법을 잃어 버렸습니다. 주기적인 빌드를 활성화하려면 Jenkinsfile에 무엇을 넣어야합니까?
답변:
선언적 스타일 파이프 라인을 사용하고 특정 분기에서만 빌드를 트리거하려는 경우 다음과 같이 할 수 있습니다.
String cron_string = BRANCH_NAME == "master" ? "@hourly" : ""
pipeline {
agent none
triggers { cron(cron_string) }
stages {
// do something
}
}
Jenkins Jira 에서 발견
선언적 스타일 Jenkinsfile을 사용하는 경우 triggers 지시문 을 사용합니다 .
pipeline {
agent any
triggers {
cron('H 4/* 0 0 1-5')
}
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
}
master
브랜치 에서만 크론 트리거를 만드는 방법은 무엇입니까? 컨텍스트를 제공하려면 팀 동료가 새 기능 브랜치를 만들고 거기에 커밋 할 때 Jenkins 파일이 여전히 트리거되어야하지만 (폴링 또는 푸시를 통해) 내가 원하지 않는 것은 이러한 기능 브랜치에서 cron 트리거가 실행되는 것입니다.
나는 이것을 폐기하는 오래된 빌드를 보여주는 예를 찾을 수 있었고, 이것은 또한 내가 원했던 것입니다.
Jenkinsfile
jenkins-infra / jenkins.io에서 :
properties(
[
[
$class: 'BuildDiscarderProperty',
strategy: [$class: 'LogRotator', numToKeepStr: '10']
],
pipelineTriggers([cron('H/30 * * * *')]),
]
)
buildDiscarder
것처럼 기호를 사용하여 구문을 단순화 할 수 있습니다 .
pipelineTriggers([[$class: "TimerTrigger", spec: "H 1 * * *"]])
이것은 나를 위해 일하고 있습니다.
triggers {
cron(env.BRANCH_NAME == 'development' ? 'H */12 * * *' : '')
}
이 기사 에서 더보기
Paramertized 주기적 실행 또는 예약 된 트리거의 경우 다음과 같이 사용할 수 있습니다.
triggers{
parameterizedCron env.BRANCH_NAME == "develop" ? '''H 03 * * * % buildSlave=vm1;testSlave=vm2;HYPERVISOR=vbox;VERSION=10.5.0.0
H 03 * * * % buildSlave=vm1;testSlave=vm2;HYPERVISOR=workstation;VERSION=10.5.0.0''' : ""
}
위의 솔루션으로 문제가 발생했습니다.
나는 Jenkins 마법사가 아니므로 이전 형식 / 구문 또는 무언가를 사용하고 있는지 확실하지 않지만 다음은 나를 위해 작동합니다.
#!/usr/bin/env groovy
properties(
[
pipelineTriggers([
[
$class: 'TimerTrigger',
spec: 'H 7,19 * * *'
]
])
]
)