Hudson을 사용하고 여러 개의 git 리포지토리가있는 단계를 구축합니다
-
05-07-2019 - |
문제
현재 BuildBot 설정을 교체하기 위해 Hudson을 시도하고 있습니다. git 플러그인을 설치했습니다. 현재 설정은 다음과 같습니다.
ssh://server:/repo/test_framework.git
ssh://server:/repo/project_a.git
이제 구축합니다 project_a
여러 Git 저장소 (위의 것)로 새로운 작업을 추가했습니다. Hudson이 저장소를 다른 디렉토리로 복제하기를 원했습니다. $WORKSPACE
, becase test_framework
해당 계층이 필요합니다. 그러나 허드슨은 모든 것을 통합하는 것 같습니다 $WORKSPACE
대신에. 콘솔 로그에서 :
warning: no common commits
...
[workspace] $ git merge-base ce14a4579e87971659e5e0469136713847055a29 96d2b3c27595de243702414c4358366923696d78
[workspace] $ git merge-base ce14a4579e87971659e5e0469136713847055a29 5bb011b3fa288afd5e4392640b32b8bcc982103e
[workspace] $ git merge-base ce14a4579e87971659e5e0469136713847055a29 aa6ade81669883909ba5f5459a205df1bd0df3c0
프로젝트 설정에 더 잘 맞도록 Hudson에서 이것을 구성 할 수 있습니까? 모든 프로젝트마다 git 하위 모듈 등으로 로컬 더미 git 저장소를 만들어야합니까?
해결책
Hudson 내에서 여러 작업을 함께 묶을 수 있습니다. test_framework와 project_a에 대한 별도의 허드슨 작업을 만들 수 있습니다. Hudson은 각 작업에 대해 $ subspace에 별도의 디렉토리를 생성하므로 이제 $ Workspace 아래에 두 개의 다른 디렉토리가 있어야합니다.
설정 체인
Project_a의 작업 구성에서 건축 후 조치를 취하고 다른 프로젝트 구축을 확인하십시오 ... 구축 할 프로젝트로 test_framework에 입력하십시오.
test_framework의 작업 구성에서 Poll SCM이 확인되지 않았습니다 그리고 다른 프로젝트 후에 그 빌드는 project_a로 설정됩니다.
작동 방식
현재 구성 한 것은 Project_a가 SCM을 찾아 변경을 찾는 것입니다. 변경 사항이 발견되면 GIT에서 변경 될 것입니다. 빌드 단계 (있는 경우)를 실행하고 완료시 Test_Framework 작업을 트리거하여 GIT (있는 경우)에서 변경 사항을 가져오고 빌드 단계를 실행하십시오.
다른 팁
"다른 프로젝트 빌드"솔루션의 문제점은 Test_Framework에 변경 사항이 있으면 Project_A를 빌드하지 않는다는 것입니다. 대신 Git 플러그인을 포기하고 다음과 함께 "실행 쉘"빌드 단계를 설정하는 것이 좋습니다.
rm -rf ${WORKSPACE}/*
git clone ssh://server:/repo/test_framework.git ${WORKSPACE}/test_framework
cd ${WORKSPACE}/test_framework
git fetch -t ssh://user@server:/repo/test_framework.git +refs/heads/*:refs/remotes/origin/*
git ls-tree HEAD
git clone ssh://server:/repo/project_a.git ${WORKSPACE}/project_a
cd ${WORKSPACE}/project_a
git fetch -t ssh://user@server:/repo/project_a.git +refs/heads/*:refs/remotes/origin/*
git ls-tree HEAD
다음으로, 후크 파일 "서버 : /repo/test_framework.git/hooks/post-receive"및 "server : /repo/project_a.git/hooks/post-receive"를 만듭니다.
#!/bin/sh
curl http://hudson/job/job_name/build
이제 변경 사항이 저장소로 푸시 될 때마다 후크는 Hudson의 API를 사용하여 빌드를 트리거합니다.
나는이 질문이 아주 오래되었다는 것을 알고 있지만 같은 문제에 부딪쳐이 페이지를 사용하여 실제로 잘 작동하는 것처럼 보이는 내 자신의 솔루션을 살펴 보았습니다 (약간의 복잡한 일이지만). 이 솔루션에 대한 대부분의 크레딧은 클린턴으로 이동해야합니다 (이 답변을 제출하는 것이 유일한 이유는 그의 대답이 동일한 기본 디렉토리에 있어야하는 여러 저장소를 다루지 않는 것 같기 때문입니다).
두 개의 리포지토리 (A 및 B)가 있다고 가정합니다.
단계 :
1) 원격 리포지토리 A와 B에서 코드를 가져 오는 두 개의 프로젝트를 작성하십시오. 필요한 빌드 단계를 저장소에 두십시오.
2) 소스 제어 관리없이 세 번째 디렉토리를 만듭니다. 이 프로젝트에 빌드 단계를 추가하여 다음과 유사한 쉘 명령을 실행하십시오.
ln -s /var/lib/jenkins/jobs/A/workspace A
ln -s /var/lib/jenkins/jobs/B/workspace B
(당신의 길은 같지 않을 수 있습니다. 스스로 찾아보세요!)
이제 디렉토리의 자매 인 A와 B에 의존하는 다른 빌드 단계를 추가 할 수 있습니다. 예이 기호 링크!
3) 세 가지 작업을 함께 체인하십시오. 풀 작업의 순서는 중요하거나 중요하지 않을 수 있지만 (귀하는 나보다 더 잘 알고 있음) 소스 제어가없는 작업은 체인의 마지막 링크 여야합니다.
나는 같은 문제에 부딪쳐서 현재 각 프로젝트에 대한 작업을 만들고 아티팩트 플러그인을 복사하십시오 GIT 업데이트가 의존성에 대한 GIT 업데이트가 수행 되더라도 종속 작업을 구축 할 수 있도록 (이는 우리가 의존하는 프로젝트에 대한 업데이트 중에 구축을 피하는 것입니다).
따라서 Project_a는 test_framework에서 필요한 최신 안정적인 아티팩트를 복사하고 Test Framework에 대한 업데이트는 Project_A에서 빌드를 트리거합니다. Project_a는 여전히 GIT의 변경으로 인해 트리거 될 수 있으며 Test_Framework의 최신 아티팩트를 다시 복사합니다.
당신이 설명하는 문제는 이미 Jenkins Bugtracker에서 버그로 제출되었습니다. https://issues.jenkins-ci.org/browse/jenkins-8082
확장 프로젝트 작업 구성에서 "Custom Workspace"옵션을 사용하여 작업의 저장소를 다른 작업의 하위 디렉토리로 확인합니다.
다른 작업은 모든 하위 모듈로 메인 디렉토리를 확인합니다.
var/lib/jenkins/jobs/
+ main_job
+ workspace (main git checkout with submodules)
+ modules
+ mod1
+ mod2
+ mod1_job (custom workspace set to main_job/workspace/modules/mod1)
+ workspace (empty)