자유 스타일 프로젝트를 사용하는 경우 20 분 후에 완료되지 않으면 빌드가 중단되도록 설정할 수 있습니다. Jenkins Multi Branch Pipeline 프로젝트로 어떻게 가능합니까?
답변:
제한 시간 단계를 사용할 수 있습니다 .
timeout(20) {
node {
sh 'foo'
}
}
MINUTESTimeUnit
이외 의 다른 값 이 필요한 경우 인수를 제공 할 수 있습니다 .unit
timeout(time: 20, unit: 'SECONDS') {
2018 년 8 월 수정 : 요즘에는 더 일반적인 선언적 파이프 라인 (최상위 pipeline
구조 에서 쉽게 인식됨 )을 사용 options
하여 다른 수준 (전체 파이프 라인 또는 단계 당)을 사용하여 시간 제한을 지정할 수도 있습니다 .
pipeline {
options {
timeout(time: 1, unit: 'HOURS')
}
stages { .. }
// ..
}
그래도 선언적 파이프 라인의 단일 단계에 제한 시간을 적용하려는 경우 위에서 설명한대로 사용할 수 있습니다.
def n=Jenkins.instance.getNode("ETService3") if (n!=null && n.computer && n.computer.online) { echo "Online" } else { echo "Offline" // wait a little bit and try again }
. 노드를 두 번 획득하는 것이 까다로운 방법입니다. 첫 번째는 외부 시간 제한이 있고 두 번째는 내부 시간 제한이 있습니다. 나도 기능이 누락되었습니다.
A에 대한 선언적 파이프 라인 그것을 사용하는 adviced되는 타임 아웃 단계 에서 옵션 섹션을 .
정해진 시간 제한을 사용하여 블록 내부의 코드를 실행합니다. 시간 제한에 도달하면 예외 (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException)가 발생하여 빌드가 중단됩니다 (어떻게 든 포착 및 처리되지 않는 한). 단위는 선택 사항이지만 기본값은 분입니다.
시간 초과 단계에는 구성 할 수있는 3 개의 매개 변수 가 있습니다.
시간 (필수, 정수)
활동 (선택 사항, 부울)
단위 (선택 사항, 값 : NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS)
예 :
timeout(time: 10) // would lead to a timeout of 10 minutes (MINUTES is default value)
timeout(time: 10, unit: 'SECONDS') // a 10 seconds timeout
timeout(time: 10, activity: false, unit: 'MILLISECONDS')
공식 젠킨스 문서는 타임 아웃의 사용에 대한 아주 좋은 예제가 실려있다 :
pipeline {
agent any
options {
timeout(time: 1, unit: 'HOURS')
}
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
}
activity
기본값은 false입니다. 때 activity
거짓 - 전체 작업 시간 제한에 대한 true
활동 제한 시간 (로그에 아무것도 인쇄).
timeout
다음 단계가 정상적으로 실행되도록 특정 단계 를 추가하고 싶습니다 . 위의 예에서 파이프 라인은 시간 초과 후 중단되고 후속 단계는 실행되지 않습니다. 내 요구 사항을 충족하는 방법이 있습니까? 주어진 단계의 시간 초과에 대한 샘플 코드 (공식 Jenkins Doc 발췌) :pipeline { agent any stages { stage('Example') { options { timeout(time: 1, unit: 'HOURS') } steps { echo 'Hello World' } } } }
JENKINS_URL/job/<any Pipeline project>/pipeline-syntax/
→ Step Reference에서도 확인할 수 있습니다.