문제

현재 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)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top