[英]Using a Jenkins pipeline to checkout multiple git repos into same job
[英]Checkout multiple git repos into same Jenkins workspace
使用 Jenkins 1.501 和 Jenkins Git 插件 1.1.26
我有 3 個不同的 git 倉庫,每個倉庫都有多個項目。
現在我需要將 3 個 git 存儲庫中的所有項目簽出到 Jenkins 從站上的同一個工作區中。 我在: Source code Management: Multiple SCMs 中定義了每個 git repo。 但是每次檢出一個 repo 時,前一個 repo(及其相關項目)都會被刪除。
我讀過這個:
http://jenkins.361315.n4.nabble.com/multiple-git-repos-in-one-job-td4633300.html
但它並沒有真正的幫助。 我試圖在本地子目錄下為所有存儲庫指定相同的文件夾(可選) ,但它給出了相同的結果。
如果使用 Jenkins 這根本不可能,我想可以使用一些預構建步驟/腳本將項目移動到正確的位置。 它不是修改項目構建配置的選項。
使用多個 SCM 插件:
為您需要檢出的每個存儲庫(主項目或依賴項目)創建不同的存儲庫條目。
對於每個項目,在“高級”菜單(第二個“高級”菜單,每個存儲庫有兩個標記為“高級”的按鈕)中,找到“本地子目錄 repo(可選)”文本字段。 您可以在“工作區”目錄中指定要將項目復制到的子目錄。 您可以映射我的開發計算機的文件系統。
“第二個高級菜單”不再存在,需要做的是使用“添加”按鈕(在“其他行為”部分),然后選擇“簽出到子目錄”
希望有幫助。
使用 Jenkins + Git 插件不可能在一個工作區中一次檢出多個存儲庫。
作為一種解決方法,您可以有多個上游作業,每個作業檢出一個存儲庫,然后復制到您的最終項目工作區(在多個級別上有問題),或者您可以設置一個 shell 腳本步驟,將每個需要的存儲庫檢出到構建時的作業工作區。
以前 Multiple SCM 插件可以幫助解決此問題,但現在已棄用。 來自 Multiple SCM 插件頁面:“用戶應該遷移到https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Plugin 。Pipeline 提供了一種更好的檢查多個 SCM 的方法,並且得到了 Jenkins 的支持核心開發團隊。”
由於多個 SCM 插件已被棄用。
使用Jenkins Pipeline可以檢查多個 git repos 並在使用 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 子模塊而不是像這樣的自定義管道。
我在 Jenkins 上成功地將Multiple SCM 插件與 Git 插件結合使用。
詹金斯:多個 SCM - 已棄用。 GIT 插件 - 不適用於多個存儲庫。
腳本/管道即代碼 - 是要走的路。
根據存儲庫的關系,另一種方法是將另一個存儲庫(存儲庫)作為git 子模塊添加到其中一個存儲庫中。 一個 git 子模塊創建對其他存儲庫的引用。 除非您在克隆“超級項目” (官方術語)時指定--recursive
標志,否則不會克隆這些子模塊存儲庫。
這是將子模塊添加到當前項目的命令:
git submodule add <repository URI path to clone>
我們正在使用 Jenkins v1.645,並且 git SCM 將開箱即用地為超級項目執行遞歸克隆。 瞧,您將在同一個 Jenkins 作業工作區的各自目錄中獲得超級項目文件和所有依賴(子模塊)repo 文件。
不保證這是正確的方法,而是一種方法。
我也有這個問題。 我在其他項目上使用觸發器/調用構建解決了它。 對於每個存儲庫,我使用參數調用下游項目。
主要項目:
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}
在一個工作區檢查了在同一時間超過一個回購協議是可能的詹金斯+ Git的插件(也許只有在最近的版本?)。
在“Source-Code-Management”部分,不要選擇“Git”,而是選擇“Multiple SCMs”並添加多個git存儲庫。
確保在除一個之外的所有其他行為中添加“檢出到子目錄”操作並指定單個子目錄作為“附加行為”。
我們正在使用git-repo來管理我們的多個 GIT 存儲庫。 還有一個Jenkins Repo 插件,它允許將 git-repo 管理的全部或部分存儲庫簽出到同一個 Jenkins 作業工作區。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.