동일한 Jenkins 작업 공간에서 여러 git 저장소 체크아웃
Jenkins 1.501 및 Jenkins Git 플러그인 1.1.26 사용
저는 프로젝트가 여러 개인 3개의 다른 깃 저장소를 가지고 있습니다.
이제 3git 저장소에서 젠킨스 슬레이브의 동일한 작업 공간으로 모든 프로젝트를 확인해야 합니다.각 깃 레포를 정의했습니다: 소스 코드 관리: 여러 SCM. 그러나 레포를 체크아웃할 때마다 이전 레포(및 관련 프로젝트)가 삭제됩니다.
나는 이것을 읽었습니다.
http://jenkins.361315.n4.nabble.com/multiple-git-repos-in-one-job-td4633300.html
하지만 별로 도움이 되지 않습니다.모든 repo에 대해 repo(선택사항)에 대해 Local 하위 디렉토리에 동일한 폴더를 지정하려고 했지만 동일한 결과를 제공합니다.
Jenkins를 사용하는 것이 불가능하다면 프로젝트를 올바른 위치로 이동하는 데 사전 빌드 단계/스크립트를 사용할 수 있을 것 같습니다.프로젝트의 빌드 구성을 수정하는 옵션은 아닙니다.
다중 SCM 플러그인 사용 시:
체크아웃해야 하는 각 저장소(주 프로젝트 또는 종속 프로젝트)에 대해 다른 저장소 항목을 만듭니다.
각 프로젝트에 대해 "advanced" 메뉴(두 번째 "advanced" 메뉴, 각 저장소에 대해 "advanced"라는 레이블이 붙은 두 개의 버튼이 있음)에서 "Local subdirectory for repo (선택사항)" 텍스트 필드를 찾습니다.프로젝트를 복사할 "작업공간" 디렉토리의 하위 디렉토리를 지정할 수 있습니다.당신은 내 개발 컴퓨터의 파일 시스템을 매핑할 수 있습니다.
"두 번째 고급 메뉴"는 더 이상 존재하지 않으며, 대신 "추가" 단추("추가 동작" 섹션에 있음)를 사용하고 "하위 디렉토리로 체크아웃"을 선택하는 것이 필요합니다.
- 이제 빌드 대상이 워크스페이스의 루트 디렉터리가 아니라 하위 디렉터리에 있는 build.xml 파일을 사용하는 경우, 이를 "Invoke Ant" 구성에 반영해야 합니다.이렇게 하려면 "Invokeant"에서 "Advanced"를 누르고 build.xml이 위치한 하위 디렉토리의 이름을 포함한 "Build file" 입력 텍스트를 채웁니다.
Jenkins + Git Plugin에서는 단일 작업 공간에서 한 번에 두 개 이상의 레포를 체크아웃할 수 없습니다.
이를 해결하기 위해 단일 Repo를 각각 확인한 후 최종 프로젝트 작업 공간에 복사하는 여러 업스트림 작업을 수행하거나(여러 수준에서 문제 발생) 빌드 시 필요한 각 Repo를 작업 작업 작업 공간에 확인하는 셸 스크립트 단계를 설정할 수 있습니다.
이전에는 다중 SCM 플러그인이 이 문제를 해결하는 데 도움이 될 수 있었지만 현재는 사용되지 않습니다.Multiple SCM 플러그인 페이지에서: "사용자는 https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Plugin 로 마이그레이션해야 합니다. Pipeline은 여러 SCM을 체크아웃하는 더 나은 방법을 제공하며 Jenkins 코어 개발팀이 지원합니다."
Multiple SCMs Plugin이 더 이상 사용되지 않기 때문입니다.
Jenkins Pipeline을 사용하면 여러 git repo를 확인하고 gradle을 사용하여 구축한 후에 확인할 수 있습니다.
node {
def gradleHome
stage('Prepare/Checkout') { // for display purposes
git branch: 'develop', url: 'https://github.com/WtfJoke/Any.git'
dir('a-child-repo') {
git branch: 'develop', url: 'https://github.com/WtfJoke/AnyChild.git'
}
env.JAVA_HOME="${tool 'JDK8'}"
env.PATH="${env.JAVA_HOME}/bin:${env.PATH}" // set java home in jdk environment
gradleHome = tool '3.4.1'
}
stage('Build') {
// Run the gradle build
if (isUnix()) {
sh "'${gradleHome}/bin/gradle' clean build"
} else {
bat(/"${gradleHome}\bin\gradle" clean build/)
}
}
}
이와 같은 사용자 지정 파이프라인 대신 git 하위 모듈을 사용하는 것을 고려해 볼 수 있습니다.
Git Plugin과 함께 Multiple SCMs Plugin을 Jenkins와 함께 성공적으로 사용했습니다.
젠킨스:다중 SCM - 사용하지 않습니다.GIT 플러그인 - 여러 저장소에 대해 작동하지 않습니다.
스크립트/파이프라인을 코드로 작성하는 것이 바람직한 방법입니다.
저장소 간의 관계에 따라 다른 저장소(리포지토리)를 git 하위 모듈로 저장소 중 하나에 추가하는 방법도 있습니다.git 하위 모듈은 다른 저장소에 대한 참조를 만듭니다.다음을 지정하지 않는 한 해당 하위 모듈 저장소는 복제되지 않습니다.--recursive
"슈퍼 프로젝트"(공식 용어)를 복제할 때 플래그를 지정합니다.
현재 프로젝트에 하위 모듈을 추가하는 명령은 다음과 같습니다.
git submodule add <repository URI path to clone>
우리는 Jenkins v1.645를 사용하고 있으며, Git SCM은 슈퍼 프로젝트에 대해 재귀적 클론을 수행할 것입니다.Voila 동일한 Jenkins 작업 작업 공간에서 슈퍼프로젝트 파일과 모든 종속(하위 모듈) 레포 파일을 각자의 디렉토리에 가져옵니다.
이것이 올바른 접근법이라는 것을 보증하지 않는 것이 오히려 접근법입니다.
저도 이런 문제가 있었습니다.다른 프로젝트에서 Trigger/call build를 사용하여 해결했습니다.각 저장소에 대해 매개 변수를 사용하여 다운스트림 프로젝트를 호출합니다.
주 프로젝트:
This project is parameterized
String Parameters: PREFIX, MARKETNAME, BRANCH, TAG
Use Custom workspace: ${PREFIX}/${MARKETNAME}
Source code management: None
그런 다음 각 저장소에 대해 다운스트림 프로젝트를 다음과 같이 부릅니다.
Trigger/call builds on other projects:
Projects to build: Linux-Tag-Checkout
Current Build Parameters
Predefined Parameters: REPOSITORY=<name>
다운스트림 프로젝트: Linux-Tag-Checkout:
This project is parameterized
String Parameters: PREFIX, MARKETNAME, REPOSITORY, BRANCH, TAG
Use Custom workspace:${PREFIX}/${MARKETNAME}/${REPOSITORY}-${BRANCH}
Source code management: Git
git@<host>:${REPOSITORY}
refspec: +refs/tags/${TAG}:refs/remotes/origin/tags/${TAG}
Branch Specifier: */tags/${TAG}
Jenkins + Git Plugin(Jenkins + Git Plugin)을 사용하면 단일 작업 공간에서 한 번에 하나 이상의 레포를 체크아웃할 수 있습니다(아마도 더 최근 버전에서만?).
Source-Code-Management 섹션에서 "Git"을 선택하지 않고 "Multiple SCM"을 선택한 후 여러 git 저장소를 추가합니다.
하나를 제외한 모든 항목에서 "추가 동작"으로 "하위 디렉토리로 체크아웃" 수행을 추가하고 개별 하위 디렉토리를 지정해야 합니다.
우리는 여러 GIT 저장소를 관리하기 위해 git-repo를 사용하고 있습니다.또한 Jenkins Repo 플러그인이 있어 git-repo에서 관리하는 리포지토리의 전부 또는 일부를 동일한 Jenkins 작업 작업 공간으로 체크아웃할 수 있습니다.
언급URL : https://stackoverflow.com/questions/14843696/checkout-multiple-git-repos-into-same-jenkins-workspace
'programing' 카테고리의 다른 글
MariaDB가 절차에서 삽입 실행을 수행하지 않습니다. (0) | 2023.09.06 |
---|---|
CSS에서 ="XYZ"의 라벨을 선택하는 방법은? (0) | 2023.09.06 |
:remote => 형식으로 파일 업로더를 사용하면 작동하지 않습니다. (0) | 2023.09.06 |
jQuery의 ajax 메서드를 사용하여 이미지를 blob으로 검색 (0) | 2023.09.06 |
JavaScript + MariaDB: json 개체 배열을 반환하고 응답에서 '\' 포워드 슬래시를 제거하는 SQL 쿼리 (0) | 2023.09.06 |