Jenkins Pipeline에 시간 초과 단계를 추가하는 방법


93

자유 스타일 프로젝트를 사용하는 경우 20 분 후에 완료되지 않으면 빌드가 중단되도록 설정할 수 있습니다. Jenkins Multi Branch Pipeline 프로젝트로 어떻게 가능합니까?

답변:


189

제한 시간 단계를 사용할 수 있습니다 .

timeout(20) {
  node {
    sh 'foo'
  }
}

MINUTESTimeUnit 이외 의 다른 값 이 필요한 경우 인수를 제공 할 수 있습니다 .unit

timeout(time: 20, unit: 'SECONDS') {

2018 년 8 월 수정 : 요즘에는 더 일반적인 선언적 파이프 라인 (최상위 pipeline구조 에서 쉽게 인식됨 )을 사용 options하여 다른 수준 (전체 파이프 라인 또는 단계 당)을 사용하여 시간 제한을 지정할 수도 있습니다 .

pipeline {
  options {
      timeout(time: 1, unit: 'HOURS') 
  }
  stages { .. }
  // ..
}

그래도 선언적 파이프 라인의 단일 단계에 제한 시간을 적용하려는 경우 위에서 설명한대로 사용할 수 있습니다.


6
참조는 1. Jenkins Dashboard<any Pipeline project> ▼ → Pipeline SyntaxStep Reference 또는 2. JENKINS_URL/job/<any Pipeline project>/pipeline-syntax/Step Reference에서도 확인할 수 있습니다.
Gerold Broser

2
콘텐츠를 실행하는 데 소요 된 시간을 계산하지 않고 노드를 획득하는 부분에서만 시간 초과가 가능합니까? 즉 : 때때로 노드가 오프라인이고 시간 초과가 아닌 시간 내에 노드를 획득 할 수없는 경우 작업이 실패하는 방법을 원하지만 노드를 획득하고 실행중인 경우 작업이 실패하는 것을 원하지 않습니다.
Jake

노드가 온라인 상태인지 알고 싶다면 다음과 같이 질문 할 수 있습니다 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 }. 노드를 두 번 획득하는 것이 까다로운 방법입니다. 첫 번째는 외부 시간 제한이 있고 두 번째는 내부 시간 제한이 있습니다. 나도 기능이 누락되었습니다.
elou

@Jake, 그것은 질문이어야합니다!
charlie_pl

1
시간 초과가 만료되었을 때 자신의 오류 메시지를 어떻게 던지나요?
red888

5

A에 대한 선언적 파이프 라인 그것을 사용하는 adviced되는 타임 아웃 단계 에서 옵션 섹션을 .

정해진 시간 제한을 사용하여 블록 내부의 코드를 실행합니다. 시간 제한에 도달하면 예외 (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException)가 발생하여 빌드가 중단됩니다 (어떻게 든 포착 및 처리되지 않는 한). 단위는 선택 사항이지만 기본값은 분입니다.

시간 초과 단계에는 구성 할 수있는 3 개의 매개 변수 가 있습니다.

  • 시간 (필수, 정수)

    • 단위가 분 단위로 지정되지 않은 경우 제한 시간의 양
  • 활동 (선택 사항, 부울)

    • 절대 기간 대신이 블록에 대한 로그에 활동이 없으면 시간이 초과됩니다.
  • 단위 (선택 사항, 값 : NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS)

    • 시간 단위 , 기본값은 MINUTES입니다.

예 :

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'
            }
        }
    }
}

2
activity기본값은 false입니다. 때 activity거짓 - 전체 작업 시간 제한에 대한 true활동 제한 시간 (로그에 아무것도 인쇄).
Maxim Suslov

1
timeout다음 단계가 정상적으로 실행되도록 특정 단계 를 추가하고 싶습니다 . 위의 예에서 파이프 라인은 시간 초과 후 중단되고 후속 단계는 실행되지 않습니다. 내 요구 사항을 충족하는 방법이 있습니까? 주어진 단계의 시간 초과에 대한 샘플 코드 (공식 Jenkins Doc 발췌) :pipeline { agent any stages { stage('Example') { options { timeout(time: 1, unit: 'HOURS') } steps { echo 'Hello World' } } } }
Yash
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.