Jenkins의 프로젝트에 하위 모듈이 있습니다. 고급 설정을 활성화하여 하위 모듈을 재귀 적으로 업데이트했습니다.
빌드를 실행하면 작업 공간에 하위 모듈의 파일이 있음을 알 수 있습니다. 문제는 서브 모듈의 첫 번째 개정판 인 것 같습니다. 변경 사항을 푸시 할 때 (GitHub에서 호스팅되는 저장소) Jenkins가 올바른 변경 사항을 가져 오기 위해 하위 모듈을 업데이트하지 않는 것 같습니다. 본 사람이 있습니까?
답변:
있습니다 2.0 플러그인 젠킨스 힘내 서브 모듈의 적절한 업데이트를 확인해야하는 "사전 서브 모듈의 행동을"해야합니다 :
Advanced sub-modules behavior
> "Path of the reference repo to use during submodule update
"이 필드에 대해 하위 모듈 git url을 추가하십시오.
인증 문제의 경우 "상위 저장소의 기본 원격에서 자격 증명 사용"옵션이 있습니다.
여기 JENKINS-20941 에서 본 :
이는 Jenkins 사이트의 Recursive submodules 섹션 아래에있는 Git Plugin 문서에서 다룹니다 .
발췌GIT 플러그인은 하위 모듈 자체가있는 하위 모듈이있는 저장소를 지원합니다. 그래도 켜야합니다 : 작업 구성 -> 섹션 소스 코드 관리 , Git- > 고급 버튼 (빌드 할 분기 아래)-> 하위 모듈을 재귀 적으로 업데이트 합니다.
작업 구성 화면의 소스 코드 관리 섹션에서 추가 버튼을 아래로 당겨 "고급 하위 모듈 동작"을 선택합니다.
그런 다음 "재귀 적으로 하위 모듈 업데이트"를 선택합니다.
Git 저장소가 항상 특정 개정판을 참조한다는 것을 알고 있습니까? 하위 모듈 을 있습니까? Jenkins는 개정판을 자동으로 변경하지 않습니다.
하위 모듈의 최신 개정판을 사용하려면 로컬 Git 저장소에서 다음을 수행해야합니다.
cd submoduledir
git pull
cd ..
git add submoduledir
git commit -m 'Updated to latest revision of submoduledir'
git push # Go and watch Jenkins build with the new revision of the submodule
이렇게하면 Jenkins는 빌드하는 동안 정확히 동일한 하위 모듈 개정판을 확인합니다. Jenkins는 사용할 하위 모듈의 개정판을 자체적으로 결정하지 않습니다. 이것이 Git 서브 모듈과 SVN 외부의 근본적인 차이점입니다.
http://progit.org/book/ch6-6.html 과 같은 하위 모듈에 대한 좋은 참조를 읽을 수 있습니다 .
마침내 이것을하는 방법을 우연히 발견했고 그것은 간단합니다.
자격 증명이있는 초기 복제는 제대로 작동하지만 submodule
잘못된 자격 증명으로 후속 복제가 실패합니다.
Source Code Management >> Additional Behaviours >> Advanced sub-modules behaviours
: 자격 증명 오류가 발생합니다.git submodule update --init
에 Execute Shell
섹션 또한 인증 오류로 실패합니다.나는 jenkins-1.574
.
Build Environment >> SSH Agent
. Source Code Management
섹션 에서 선택한 것과 동일 할 수 있음).Execute Shell
섹션의 하위 모듈 업데이트
git submodule sync
git submodule update --init --recursive
다음은 스크린 샷입니다.
해결책을 찾은 것 같습니다.
다음 셸 명령을 실행하는 빌드 단계를 추가했습니다.
git submodule foreach git checkout master
git submodule foreach git pull
git submodule update --init --recursive
체크 아웃 플러그인과 함께 스크립팅 된 파이프 라이닝을 사용하고 있습니다. 하위 모듈이 저장소에있는 것과 동일하게하려면 다음과 같이 trackingSubmodules 옵션을 끄면됩니다.
checkout([$class: 'GitSCM', branches: [[name: '*/develop']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'SubmoduleOption', disableSubmodules: false, parentCredentials: true, recursiveSubmodules: false, reference: '', trackingSubmodules: false]], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '[myCredentials]', url: 'https://git.myRepo.git']]])