반응형
Jenkins 파이프 라인을 사용하여 여러 git 저장소를 동일한 작업으로 체크 아웃
Jenkins Multiple SCM 플러그인을 사용하여 Jenkins 작업의 3 개의 하위 디렉토리로 3 개의 git 저장소를 확인합니다. 그런 다음 한 세트의 명령을 실행하여 세 저장소 모두에서 가져온 정보와 코드로 단일 아티팩트 세트를 빌드합니다.
다중 SCM은 이제 감가 상각되었으며 텍스트는 파이프 라인으로 이동하도록 권장합니다. 시도했지만 어떻게 작동하는지 알 수 없습니다.
다음은 Jenkins 작업 디렉토리의 최상위 수준에서보고 싶은 디렉토리 구조입니다.
$ ls
Combination
CombinationBuilder
CombinationResults
이 세 개의 하위 디렉토리에는 각각 하나의 git 저장소가 체크 아웃되어 있습니다. Multiple SCM에서는 git을 사용한 다음 "하위 디렉토리에 체크 아웃"동작을 추가했습니다. 파이프 라인 스크립트를 사용한 시도는 다음과 같습니다.
node('ATLAS && Linux') {
sh('[ -e CalibrationResults ] || mkdir CalibrationResults')
sh('cd CalibrationResults')
git url: 'https://github.com/AtlasBID/CalibrationResults.git'
sh('cd ..')
sh('[ -e Combination ] || mkdir Combination')
sh('cd Combination')
git url: 'https://github.com/AtlasBID/Combination.git'
sh('cd ..')
sh('[ -e CombinationBuilder ] || mkdir CombinationBuilder')
sh('cd CombinationBuilder')
git url: 'https://github.com/AtlasBID/CombinationBuilder.git'
sh 'cd ..'
sh('ls')
sh('. CombinationBuilder/build.sh')
}
그러나 git 명령은 작업 공간의 최상위 디렉토리에서 실행되는 것 같습니다 (일리가 있음). 구문에 따르면 하위 디렉토리로의 체크 아웃 동작이없는 것 같습니다.
이 dir
명령을 사용하여 하위 디렉터리에서 파이프 라인 단계를 실행할 수 있습니다 .
node('ATLAS && Linux') {
dir('CalibrationResults') {
git url: 'https://github.com/AtlasBID/CalibrationResults.git'
}
dir('Combination') {
git url: 'https://github.com/AtlasBID/Combination.git'
}
dir('CombinationBuilder') {
git url: 'https://github.com/AtlasBID/CombinationBuilder.git'
}
sh('ls')
sh('. CombinationBuilder/build.sh')
}
다음과 같이 체크 아웃 SCM 단계를 세 번 사용하여 세 개의 git 리포지토리를 세 개의 하위 디렉토리로 체크 아웃 할 수 있습니다.
stage('Checkout') {
// Get CalibrationResults from GitHub
checkout([
$class: 'GitSCM',
branches: [[name: 'refs/heads/master']],
doGenerateSubmoduleConfigurations: false,
extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'CalibrationResults']],
submoduleCfg: [],
userRemoteConfigs: [[credentialsId: '6463627-ab54-4e42-bc29-123458', url: 'https://github.com/AtlasBID/CalibrationResults.git']]
])
// Get Combination from GitHub
checkout([
$class: 'GitSCM',
branches: [[name: 'refs/heads/master']],
doGenerateSubmoduleConfigurations: false,
extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'Combination']],
submoduleCfg: [],
userRemoteConfigs: [[credentialsId: '6463627-ab54-4e42-bc29-123458', url: 'https://github.com/AtlasBID/Combination.git']]
])
// Get CombinationBuilder from GitHub
checkout([
$class: 'GitSCM',
branches: [[name: 'refs/heads/master']],
doGenerateSubmoduleConfigurations: false,
extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'CombinationBuilder']],
submoduleCfg: [],
userRemoteConfigs: [[credentialsId: '6463627-ab54-4e42-bc29-123458', url: 'https://github.com/AtlasBID/CombinationBuilder.git']]
])
}
여기 내 꺼야
stage('CheckoutModule1') {
steps {
sh 'mkdir -p Module1'
dir("Module1")
{
git branch: "develop",
credentialsId: 'aaa',
url: 'git@a.com:b/module1.git'
}
}
}
stage('CheckoutModule2') {
steps {
sh 'mkdir -p Module2'
dir("Module2")
{
git branch: "develop",
credentialsId: 'aaa',
url: 'git@a.com:b/module2.git'
}
}
}
저장소에 하위 모듈이있는 경우 git checkout 사용
pipeline {
agent {label 'master'}
stages{
stage("Demo"){
steps{
echo 'Hello World'
}
}
stage("Source"){
parallel{
stage('CalibrationResults'){
steps{
echo 'Checking out CalibrationResults'
checkout([$class: 'GitSCM', branches: [[name: '*/CI-CD-Demo']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CloneOption', depth: 0, noTags: true, reference: '', shallow: false, timeout: 60], [$class: 'SubmoduleOption', disableSubmodules: false, parentCredentials: false, recursiveSubmodules: true, reference: '', timeout: 60, trackingSubmodules: true], [$class: 'RelativeTargetDirectory', relativeTargetDir: 'server-core'],[$class: 'CheckoutOption', timeout: 60]], submoduleCfg: [], userRemoteConfigs: [[url: 'https://github.com/AtlasBID/CalibrationResults.git']]])
}
}
stage('Combination'){
steps{
echo 'Checking out server spoke'
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CloneOption', depth: 0, noTags: true, reference: '', shallow: false, timeout: 60], [$class: 'SubmoduleOption', disableSubmodules: false, parentCredentials: false, recursiveSubmodules: true, reference: '', timeout: 60, trackingSubmodules: true], [$class: 'RelativeTargetDirectory', relativeTargetDir: 'server-spoke'], [$class: 'CheckoutOption', timeout: 60]], submoduleCfg: [], userRemoteConfigs: [[url: 'https://github.com/AtlasBID/CombinationBuilder.git']]])
}
}
}
}
}
}
Checkout git snippet 생성기를 사용하여 생성됨
반응형
'programing' 카테고리의 다른 글
Swift에서 고유 한 객체 목록 배열을 만드는 방법 (0) | 2021.01.14 |
---|---|
목록에서 처음 N 개의 요소를 제거하는 가장 효율적인 방법은 무엇입니까? (0) | 2021.01.14 |
IE7은 왜 image / jpeg가 아닌 mime 유형의 image / pjpeg를 지정합니까? (0) | 2021.01.14 |
sqlite3.exe 명령 줄 도구로 프로세스를 자동화하는 방법은 무엇입니까? (0) | 2021.01.14 |
편집 모드를 종료하지 않고 vim에서 들여 쓰기를 해제하는 방법은 무엇입니까? (0) | 2021.01.14 |