2017-12-13 14 views
2

은 나의 사용 사례입니다.Jenkins - Gerrit 패치 세트의 다운 스트림 작업 생성 방법을 보여주는 방법은 무엇입니까? 아래의

저는 작업 A, B, C-A가 업스트림이고 B와 C가 다운 스트림 작업입니다. Gerrit에서 생성 된 패치 세트가 patchset created event에 기반하여 Job A을 트리거하고이 작업의 결과에 따라 B와 C를 트리거합니다. B와 C가 실행 된 후 Gerrit에 세 가지 작업의 결과를 모두 표시하려고합니다 패치 세트. 같은

Job A SUCCESS 
JOB B SUCCESS 
JOB C FAILED 

지금 나는이 작업을 수행 할 수있는 방법이있는 경우에만 JOB A 빌드 결과가

JOB A SUCCESS 

로 리트 패치 SET에 게재 볼?

답변

1

는 다음을 수행합니다

1) 패치 세트가 생성 될 때 트리거하는 모든 작업 (A, B 및 C)를 구성합니다.

2) 작업에 의존하는 작업 B와 C를 구성한

2.1)을 클릭 "고급 ..."리트 트리거 작업 구성

enter image description here

2.2) 작업을 추가로 이 구성 작업 B 필드

enter image description here

은 "이 작업이 의존하는 다른 작업"에 그들이 시작하기 전에 C는 작업 A를 마무리를 기다리는 당신은 당신이 원하는 결과를 얻을 수 있습니다 :

enter image description here

+0

감사합니다, 모두 3 번에 트리거 권리를 기반으로 실행? JJB (jenkins job builder)를 사용하여 작업 구성을 만듭니다. 이 옵션이 https://docs.openstack.org/infra/jenkins-job-builder/triggers.html?highlight=gerrit%20trigger#triggers.gerrit에서 보이지 않습니다. – RBT

+0

3이 실행되지만 B와 C는 실행됩니다. A가 시작되기를 기다리는 동안 "보류"상태를 유지하십시오. 옵션은 dependency-jobs입니다. 그냥 설정하고 재미있게 놀 수 있습니다 :-) –

+0

Marcelo Ávila de Oliveira. 감사합니다. 위의 설정에 대한 관찰은 다음과 같습니다. – RBT

0

이 문제를 해결하는 가장 좋은 방법은 작은 래퍼 파이프 라인 작업을 만드는 것입니다. 이름을 Build_ABC로 지정하십시오.

원하는 Gerrit 이벤트에서 트리거하도록 Build_ABC를 구성하십시오. 작업은 다른 3 개의 빌드를 실행하는 책임을지며 이러한 작업에 실패하면 Build_ABC가 실패하고이를 다시 Gerrit에보고합니다. Gerrit 메시지에서 어떤 작업이 실패했는지 즉시 알 수는 없지만 Jenkins 파이프 라인 개요에서 볼 수 있습니다.

아래 스크립트 된 파이프 라인 스크립트에서 Build_A를 호출하고 결과를 기다리는 파이프 라인이 표시됩니다. 빌드가 성공하면 빌드 B와 C가 병렬로 계속 실행됩니다. 필자의 예에서는 빌드 C가 실패하여 전체 파이프 라인 작업이 실패하게되었습니다.


이것은 제 주먹 대답의 개정판이며 스크립트는 조금 증가했습니다. Gerrit에 게시 된 메시지에 개별 빌드 결과가 있어야하므로 파이프 라인이 개별 결과를 포착하여 기록하도록 변경되었습니다. 빌드 A가 빌드에 실패하면 B + C는 건너 뛰고 상태는 건너 뜁니다. 다음은 수동 검토를 수행하기 위해 gerrit review ssh 명령 줄 도구를 사용할 수 있습니다. 이렇게하면 개별 빌드 결과를 포함하도록 사용자 지정 메시지를 생성 할 수 있습니다.나는 그것을 여러 줄 주석 만드는 방법을 알아 냈하지 않은 있지만, 명령 줄에서 JSON을 사용할 수있는 옵션도있다

enter image description here

이 한 번 봐 가지고는 아래 스크린 샷처럼 보이는 .

def build_a = "Skipped" 
def build_b = "Skipped" 
def build_c = "Skipped" 
def build_result = "+1" 

try { 
    stage("A") { 
    try { 
     build(job: '/Peter/Build_A', wait: true) 
     build_a = "Pass" 
    } catch (e) { 
     build_a = "Failed" 
     // throw again or else the job to make the build fail 
     // throwing here will prevent B+C from running 
     throw e 
    } 
    } 

    stage("After A") { 
    parallel B: { 
     try { 
     build(job: '/Peter/Build_B', wait: true) 
     build_b = "Pass" 
     } catch (e) { 
     build_b = "Failed" 
     // throw again or else the job to make the build fail 
     throw e 
     } 
    }, C: { 
     try { 
     build(job: '/Peter/Build_C', wait: true) 
     build_c = "Pass" 
     } catch (e) { 
     build_c = "Failed" 
     // throw again or else the job to make the build fail 
     throw e 
     } 
    } 
    } 
} catch(e) { 
    build_result = "-1" 
    // throw again or else the job to make the build fail 
    throw e 
} finally { 
    node('master') { 
    // Perform a custom review using the environment vars 
    sh "ssh -p ${env.GERRIT_PORT} ${env.GERRIT_HOST} gerrit review --verified ${build_result} -m '\"Build A:${build_a} Build B: ${build_a} Build C: ${build_c}\"' ${env.GERRIT_PATCHSET_REVISION}" 
    } 
} 

다음으로 Jenkins의 결과를 무시하도록 Gerrit 트리거를 구성해야합니다. 그렇지 않으면 두 번 투표가 있습니다. enter image description here

또 다른 이점은 Ocean Blue 플러그인을 사용하면 아래 그림과 같이 빌드를 볼 수 있고 작업을 클릭하여 잘못 된 점을 확인할 수 있다는 것입니다. 빠른 응답 .. 나는 모든 A, B 및 C 작업에 대한 트리거를 사용하기위한

enter image description here

+0

3 가지 작업에서 gerrit-trigger를 어떻게 설정 했습니까? gerrit-trigger를 확인 했습니까? 예를 들어, Gerrit의 "Job A Success", "Job B SUCCESS"및 "Job C Failed"와 같은 사용자 의견) –

+0

JOB B : ** - 트리거 : 이름 : gerrit-trigger-patch-submitted-skip 트리거 : - gerrit : 서버 이름 : 'xxx' 트리거 - 온 : - 패치 세트가 만든 이벤트 : 제외-초안 '거짓'은 제외 사소한-REBASE : '거짓'을 제외되지 노 코드 변경 : '거짓' - 초안 발표 이벤트 은 - 주석 - 추가를 -contains-event : 주석 포함 값 : '다시 확인' - 주석 추가 내용 : 종속성 작업 : 작업 ** – RBT

+0

빌드 결과를 기반으로 작업을 트리거 할 수 있습니까? https://docs.openstack.org/infra/jenkins-job-builder/triggers.html?highlight=triggers#triggers.gerrit이 옵션은 표시되지 않습니다. 'comment-containes-value' 옵션을 사용하여 패치 세트에 제공된 주석을 기반으로 빌드를 트리거합니다. – RBT