파일 Jenkins:업스트림 변경시 다중 분기 파이프 라인 트리거



pipeline jenkins (3)

현재 Jenkins 2.0의 파이프 라인 접근 방식을 테스트 중이며 사용중인 빌드 환경에서 작동하는지 확인합니다.

우선 환경 자체에 대해. 현재 여러 SCM 리포지토리로 구성되어 있습니다. 각 저장소는 개발의 여러 단계에 대해 여러 가지 분기를 포함하며 각 분기는 여러 구성으로 빌드됩니다. 모든 설정이 모든 저장소에 적용되는 것은 아닙니다.

현재 모든 저장소 / 지점은 서로 다른 구성을위한 매트릭스 프로젝트 로 설정됩니다. 각 프로젝트는 건물 결과를 유물로 공개하며 이러한 유물은 다운 스트림 프로젝트에서 사용됩니다.

서로 다른 리파지토리가 서로 의존하므로 업스트림 작업을 성공적으로 빌드하면 일부 다운 스트림 작업이 트리거됩니다. 현재 작동하는 모든 것들이 있지만 많은 다른 프로젝트를 수동으로 변경해야하기 때문에 새로운 지점을 설정하거나 건물 프로세스를 조정하는 데 필요한 작업량이 많습니다.

이제 새로운 파이프 라인을 시험해보고 싶었습니다. 내 생각은 다중 분기 파이프 라인 프로젝트를 작성하고 Jenkinsfile 저장소의 지침을 포함하는 저장소에 배치하는 것이 Jenkinsfile 습니다.

기본적으로 특정 업스트림 브랜치의 빌드가 다운 스트림 브랜치를 트리거해야하기 때문에 빌드를 서로 트리거하는 것이 주된 문제입니다. 다운 스트림 지점을 트리거해야하는 정보는 업스트림 프로젝트에 알려지지 않았습니다. 각 다운 스트림 프로젝트는 일부 업스트림 브랜치에서 아티팩트를 가져오고 이상적인 솔루션은 아티팩트의 소스 인 업스트림 빌드가 빌드를 완료하는 경우 다운 스트림 빌드가 트리거되는 경우입니다.

문제는 다운 스트림 프로젝트가 실제로 필요한 아티팩트를 아는 것입니다. 대부분의 경우 지사 이름이 일치하지 않을 수 있으므로 업스트림 프로젝트의 빌드가 매우 어려워집니다.

현재 이것은 ReverseBuildTrigger 사용하여 해결됩니다. 그러나이 작업은 파이프 라인에 가까운 곳에서 작업하는 즉시 작업을 중단합니다.

나는이 일을하는 방법을 잃어 버렸습니다. ReverseBuildTrigger 가 파이프 라인 스크립트에서 작동하는 것과 같은 것을 얻을 수있는 방법이 있습니까?

또한 단일 분기 업스트림이 변경된 경우 모든 분기에 대해 전체 다운 스트림 빌드를 트리거하는 것은 옵션이 아닙니다. 이것은 너무 많은 평등 빌드를 생성합니다.


Answer #1

파이프 라인 작업 구성은 여전히 ​​역방향 빌드 트리거, 다른 프로젝트가 빌드 된 후 빌드를 포함하여 빌드 트리거를 기본적으로 지원합니다. 파이프 라인 다중 분기 프로젝트에서 분기를 지정할 수도 있습니다.

불행히도 역방향 트리거링을 사용할 수 없습니다. 파이프 라인 다중 분기 작업. 역방향 트리거링에 가장 근접한 것은 Promoted Builds Plugin을 사용하는 것 입니다. 하지만 여전히 분기 설정을 구성 할 수는 없습니다.

또한 스 니펫 생성기 는 다음을 명확히합니다.

현재 다음 변수는 파이프 라인 스크립트에서 사용할 수 없습니다.

NODE_LABELS 작업 공간 SVN_REVISION과 같은 SCM 특정 변수

추신. 어쩌면 유일한 방법은 상류 에서 하류물어 보는 것 입니다.


Answer #2

현재이 배포를 위해 작동하도록 노력하고 있습니다. 가장 가까운 것은 Jenkinsfile 다운 스트림에 다음을 추가하는 것입니다.

properties([
    pipelineTriggers([
        triggers: [
            [
                $class: 'jenkins.triggers.ReverseBuildTrigger',
                upstreamProjects: "some_project", threshold: hudson.model.Result.SUCCESS
            ]
        ]
    ]),
])

최소한 Jenkins가 'some_project'가 빌드 될 때 트리거해야한다는 것을 알게됩니다. 즉, "View Configuration"페이지에 나타납니다.

그러나 지금까지 'some_project'빌드는 여전히 다운 스트림 프로젝트를 예상대로 트리거하지 않습니다.

그것이 아마 당신은 더 운이있을 것이라고 말했다. 그것이 당신을 위해 작동하는지 알려주세요.

(다른 사람이 Jenkins 다중 분기 파이프 라인과 업스트림 프로젝트를 지정 하는 유사한 질문을 했습니다 )


Answer #3

선언적 다중 분기 파이프 라인을 사용하는 경우 다음을 사용할 수 있습니다.

triggers {
  upstream(upstreamProjects: "some_project/some_branch", threshold: hudson.model.Result.SUCCESS)
}

의존성간에 분기 일치가 발생하기를 원할 경우 다음을 사용할 수 있습니다.

triggers {
  upstream(upstreamProjects: "some_project/" + env.BRANCH_NAME.replaceAll("/", "%2F"), threshold: hudson.model.Result.SUCCESS)
}




jenkinsfile