programing

여러 동시 업스트림 작업이 성공한 후 Jenkins 작업을 시작하려면 어떻게해야합니까?

nasanasas 2020. 11. 2. 08:04
반응형

여러 동시 업스트림 작업이 성공한 후 Jenkins 작업을 시작하려면 어떻게해야합니까?


가능한 가장 빠른 피드백을 얻기 위해 때때로 Jenkins 작업이 병렬로 실행되기를 원합니다. Jenkins는 작업이 완료되면 여러 다운 스트림 작업을 시작 (또는 파이프 라인 '포크') 할 수 있습니다. 그러나 Jenkins는 해당 포크의 모든 분기가 성공 (또는 포크를 다시 '결합')하는 경우에만 다운 스트림 작업을 시작하도록 만드는 방법이없는 것 같습니다.

젠킨스는 버튼은 "다른 프로젝트가 건설 된 후 빌드"을 가지고,하지만 난으로 그 해석 "이 일을 시작할 때 어떤 상류 작업 완료"(안 "때이 작업을 시작 하는 모든 업스트림 작업이 성공").

다음은 제가 말하는 내용을 시각화 한 것입니다. 내가 원하는 일을 할 수있는 플러그인이 있는지 아는 사람이 있습니까?파이프 라인 구축


편집하다:

2012 년에이 질문을 처음 게시했을 때 Jason의 답변 (Join 및 Promoted Build 플러그인)이 최고 였고 제가 함께했던 솔루션이었습니다.

그러나 dnozay의 답변 (Build Flow 플러그인)은이 질문 이후 1 년 정도 후에 인기를 얻었으며 훨씬 더 나은 답변입니다. 오늘 사람들이 저에게이 질문을한다면 그만한 가치가 있습니다.


과거에이 시나리오에 사용한 두 가지 솔루션이 있습니다.

  1. "배포"작업 에서 Join Plugin사용하고 대상 작업으로 "승격"을 지정하십시오. 결합 된 작업으로 "기능 테스트"및 "성능 테스트"를 지정하고 빌드 후 어떤 방식으로이를 통해 시작해야합니다. 매개 변수화 된 트리거 플러그인 이 좋습니다.

  2. "배포"작업 에서 승격 된 빌드 플러그인사용하고 다운 스트림 작업이 완료 될 때 작동하는 승격을 지정하고 기능 및 성능 테스트 작업을 지정하십시오. 승격 조치의 일부로 "승격"작업을 트리거하십시오. "배포"에서 두 개의 테스트 작업을 시작해야합니다.

이 두 솔루션에는 모두 중요한 측면이 있습니다. 지문을 올바르게 사용해야합니다. 내가 찾은 내용은 다음과 같습니다.

  1. "빌드"작업은 새로운 지문 파일을 생성해야합니다. 즉, Jenkins가 초기 작업에서 생성되었다고 생각하는 일부 파일에 지문을 생성해야합니다. 이를 확인하려면 작업의 "지문보기"링크를 다시 확인하십시오.
  2. 모든 다운 스트림 링크 작업 (이 경우 "배포", "기능 테스트"및 "성능 테스트")은이 동일한 파일을 가져 와서 지문을 생성해야합니다. Copy Artifacts 플러그인은 이런 종류의 작업에 적합합니다.
  3. 일부 플러그인을 사용하면 지문 및 다운 스트림 작업 시작 순서를 변경할 수 있습니다. 이 경우 지문의 ORIGIN이 올바르게 설정되었는지 확인하기 위해 다운 스트림 작업이 동일한 파일에 지문을 찍기 전에 지문을 만들어야합니다.

파이프 라인 플러그인

파이프 라인 플러그인 (이전의 workflow-plugin)을 사용할 수 있습니다 .

많은 예제 와 함께 제공 되며이 자습서를 따를 수 있습니다 .

예 :

// build
stage 'build'
...

// deploy
stage 'deploy'
...

// run tests in parallel
stage 'test'
parallel 'functional': {
  ...
}, 'performance': {
  ...
}

// promote artifacts
stage 'promote'
...

흐름 플러그인 빌드

Build Flow Plugin을 사용할 수도 있습니다 . 단순히 굉장하지만 더 이상 사용되지 않습니다 (개발 중단).

작업 설정

다음에 대한 작업 생성 :

  • 짓다
  • 전개
  • 성능 테스트
  • 기능 테스트
  • 프로모션

업스트림 설정

  1. 업스트림 (여기 build)에서 고유 한 아티팩트를 만듭니다. 예 :

    echo ${BUILD_TAG} > build.tag
    
  2. build.tag아티팩트를 보관하십시오 .

  3. 파일 사용을 추적하기 위해 지문을 기록합니다. 어떤 작업이 동일한 build.tag파일을 복사하고 지문을 기록하는 경우 부모를 추적 할 수 있습니다.
  4. promotion작업이 성공 하면 승격되도록 구성합니다 .

다운 스트림 작업 설정

  1. 2 개의 매개 변수를 사용 PARENT_JOB_NAME하고PARENT_BUILD_NUMBER
  2. Copy Artifact Plugin을build 사용하여 업스트림 작업 에서 아티팩트 복사

    • 프로젝트 이름 = ${PARENT_JOB_NAME}
    • 어느 빌드 = ${PARENT_BUILD_NUMBER}
    • 복사 할 아티팩트 = build.tag
  3. Record fingerprints; that's crucial.

Setting up the downstream promotion job

Do the same as the above, to establish upstream-downstream relationship. It does not need any build step. You can perform additional post-build actions like "hey QA, it's your turn".

Create a build flow job

// start with the build
parent = build("build")
parent_job_name = parent.environment["JOB_NAME"]
parent_build_number = parent.environment["BUILD_NUMBER"]

// then deploy
build("deploy")

// then your qualifying tests
parallel (
    { build("functional tests",
          PARENT_BUILD_NUMBER: parent_build_number,
          PARENT_JOB_NAME: parent_job_name) },
    { build("performance tests",
          PARENT_BUILD_NUMBER: parent_build_number,
          PARENT_JOB_NAME: parent_job_name) }
)

// if nothing failed till now...
build("promotion",
    PARENT_BUILD_NUMBER: parent_build_number,
    PARENT_JOB_NAME: parent_job_name)

// knock yourself out...
build("more expensive QA tests",
    PARENT_BUILD_NUMBER: parent_build_number,
    PARENT_JOB_NAME: parent_job_name)

good luck.


Jenkins recently announced first class support for workflow.


The Multijob plugin works beautifully for that scenario. It also comes in handy if you want a single "parent" job to kick off multiple "child" jobs but still be able to execute each of the children manually, by themselves. This works by creating "phases", to which you add 1 to n jobs. The build only continues when the entire phase is done, so if a phase as multiple jobs they all must complete before the rest are executed. Naturally, it is configurable whether the build continues if there is a failure within the phase.


Answers by jason & dnozay are good enough. But in case someone is looking for easy way just use JobFanIn plugin.


Workflow Plugin은 이제 Pipeline Plugin 이라고 하며 Build Flow Plugin에서 영감을 얻은 원래 질문에 대한 (현재) 선호되는 솔루션 이라고 생각합니다 . 또한이 시작 튜토리얼 GitHub에있다.

참고 URL : https://stackoverflow.com/questions/9012310/how-do-i-make-a-jenkins-job-start-after-multiple-simultaneous-upstream-jobs-succ

반응형