2017-09-27 1 views
0

개발주기가 여러 동시 릴리스 분기를 유지합니다.빌드 전 병합 Jenkins git plugin 옵션이 트리거되지 않음

가능한 한 주기적으로 릴리스 분기에서 병합 충돌을 표시 할 수있는 확실한 방법을 원합니다.

젠킨스의 빌드 작업에서 릴리스 *를 빌드 할 분기로 지정하고 빌드 시작 전에 마스터에 "빌드 전 병합"옵션을 지정합니다.

여기 내 플러그인은 각 릴리스 분기의 빌드를 시작하기 전에 모두 개의 분기를 마스터로 찾습니다.

이것을 테스트하기 위해 더미 repo를 설정했습니다. repo에는 하나의 텍스트 파일이 있습니다. 3 가지가 있습니다

내가 의도적으로 병합 충돌을 만들 release1 및 release2의 파일에 같은 줄을 업데이트 (마스터에서 촬영) release2 (마스터에서 촬영)

마스터 (주) release1은 나는 존재를 확인했다.

이제 작업을 빌드 할 때 젠킨스가 릴리스 1과 릴리스 2를 마스터에 병합하여 병합 충돌이 발생하여 실패 할 것으로 예상합니다. 이는 우리가 원하는 것입니다.

그러나 Jenkins는 "빌드 전 병합"옵션이 설정되어 있음에도 불구하고이를 시도하지 않는 것처럼 보입니다.

Fetching upstream changes from [email protected]:xxxxxxx/test_repo.git 
> git --version # timeout=10 
> git fetch --tags --progress [email protected]:xxxxxxx/test_repo.git 
+refs/heads/*:refs/remotes/origin/* 
Seen branch in repository origin/master 
Seen branch in repository origin/release1 
Seen branch in repository origin/release2 
Seen 3 remote branches 
Checking out Revision 5b75c954f334a2fc6c683cd7304d4d84826f02cd 
(origin/release2, origin/master) 
> git config core.sparsecheckout # timeout=10 
> git checkout -f 5b75c954f334a2fc6c683cd7304d4d84826f02cd 
> git rev-list 5b75c954f334a2fc6c683cd7304d4d84826f02cd # timeout=10 
> git rev-list 5b75c954f334a2fc6c683cd7304d4d84826f02cd # timeout=10 
Set build name. 
New build name is '#8 ' 
[build-sharknado-app] $ /bin/sh -xe /tmp/hudson1678313403112351764.sh 
+ cat file.txt 
x=7 

작업이 성공하고 병합 충돌이 표시되지 않습니다.

왜 여러 릴리스의 마스터에 대한 분기가 일어나지 않습니까?

+0

'git checkout -f 5b75c954f334a2fc6c683cd7304d4d84826f02cd' 특정 커밋이 체크 아웃되어 분리 된 HEAD 상태에 있습니다. 'master/master'는 '5b75c954f334a2fc6c683cd7304d4d84826f02cd'를 가리 키지 만'master '분기는 체크 아웃되지 않으므로 로컬에 존재하지 않습니다. 이것이 원인 일 수 있습니다. – ElpieKay

+0

그게 문제인 것처럼 보이지만 커밋이 체크 아웃되는 이유를 모르겠습니다. "Branches to Build"옵션으로 "origin/release *"를 지정하고 있으며 이러한 분기가 존재합니다. 그러나 릴리스 2만이 빌드의 일부로 마스터에 병합됩니다. –

답변

0

이 경우 Git 플러그인은 의도 된대로 작동합니다.

모든 브랜치가 Jenkins 작업 공간에서 git repo의 로컬 사본을 기반으로 개정 변경 사항을 검색 중입니다. 아무 것도 발견되지 않으면 Jenkins는 가장 최근 커밋에 대해서만 작용합니다.

Git 플러그인은 동일한 빌드에서 여러 브랜치를 마스터로 병합하도록 설계되지 않았습니다.

변경 사항이 여러 분기에서 감지되는 경우 Jenkins는 각 분기마다 새 빌드 작업을 시작합니다. 각 작업에서 관련 지사가 마스터에 병합되지만 Jenkins는 master에 HEAD를 다시 설정하는 -f 옵션을 사용하여 master를 체크 아웃하므로 마스터에 병합되는 여러 분기에서 발생하는 빌드 충돌이 감지되지 않습니다.

즉, Jenkins는 지점 간 병합으로 인해 발생하는 병합 충돌 만 감지 할 수 있으며 동일한 지점 분기에 2 개의 다른 지점을 병합 할 때 발생하는 충돌은 감지 할 수 없습니다.

관련 문제