이 문제를 해결하는 가장 좋은 방법은 작은 래퍼 파이프 라인 작업을 만드는 것입니다. 이름을 Build_ABC로 지정하십시오.
원하는 Gerrit 이벤트에서 트리거하도록 Build_ABC를 구성하십시오. 작업은 다른 3 개의 빌드를 실행하는 책임을지며 이러한 작업에 실패하면 Build_ABC가 실패하고이를 다시 Gerrit에보고합니다. Gerrit 메시지에서 어떤 작업이 실패했는지 즉시 알 수는 없지만 Jenkins 파이프 라인 개요에서 볼 수 있습니다.
아래 스크립트 된 파이프 라인 스크립트에서 Build_A를 호출하고 결과를 기다리는 파이프 라인이 표시됩니다. 빌드가 성공하면 빌드 B와 C가 병렬로 계속 실행됩니다. 필자의 예에서는 빌드 C가 실패하여 전체 파이프 라인 작업이 실패하게되었습니다.
이것은 제 주먹 대답의 개정판이며 스크립트는 조금 증가했습니다. Gerrit에 게시 된 메시지에 개별 빌드 결과가 있어야하므로 파이프 라인이 개별 결과를 포착하여 기록하도록 변경되었습니다. 빌드 A가 빌드에 실패하면 B + C는 건너 뛰고 상태는 건너 뜁니다. 다음은 수동 검토를 수행하기 위해 gerrit review ssh 명령 줄 도구를 사용할 수 있습니다. 이렇게하면 개별 빌드 결과를 포함하도록 사용자 지정 메시지를 생성 할 수 있습니다.나는 그것을 여러 줄 주석 만드는 방법을 알아 냈하지 않은 있지만, 명령 줄에서 JSON을 사용할 수있는 옵션도있다
이 한 번 봐 가지고는 아래 스크린 샷처럼 보이는 .
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 트리거를 구성해야합니다. 그렇지 않으면 두 번 투표가 있습니다.
또 다른 이점은 Ocean Blue 플러그인을 사용하면 아래 그림과 같이 빌드를 볼 수 있고 작업을 클릭하여 잘못 된 점을 확인할 수 있다는 것입니다. 빠른 응답 .. 나는 모든 A, B 및 C 작업에 대한 트리거를 사용하기위한
감사합니다, 모두 3 번에 트리거 권리를 기반으로 실행? JJB (jenkins job builder)를 사용하여 작업 구성을 만듭니다. 이 옵션이 https://docs.openstack.org/infra/jenkins-job-builder/triggers.html?highlight=gerrit%20trigger#triggers.gerrit에서 보이지 않습니다. – RBT
3이 실행되지만 B와 C는 실행됩니다. A가 시작되기를 기다리는 동안 "보류"상태를 유지하십시오. 옵션은 dependency-jobs입니다. 그냥 설정하고 재미있게 놀 수 있습니다 :-) –
Marcelo Ávila de Oliveira. 감사합니다. 위의 설정에 대한 관찰은 다음과 같습니다. – RBT