簡體   English   中英

將多個 git repos 簽出到同一個 Jenkins 工作區

[英]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(可選)”文本字段。 您可以在“工作區”目錄中指定要將項目復制到的子目錄。 您可以映射我的開發計算機的文件系統。

“第二個高級菜單”不再存在,需要做的是使用“添加”按鈕(在“其他行為”部分),然后選擇“簽出到子目錄”

  • 如果您正在使用 ant,因為現在構建目標的 build.xml 文件不在工作區的根目錄中,而是在子目錄中,您必須在“調用 Ant”配置中反映這一點。 為此,在“調用 ant”中,按“高級”並填寫“構建文件”輸入文本,包括 build.xml 所在子目錄的名稱。

希望有幫助。

使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM