2009-11-27 136 views
16

我試圖用哈德森替換我們目前的Buildbot安裝程序。我安裝了git插件。我們目前的設置是這樣的:使用哈德森並與多個git倉庫構建步驟

ssh://server:/repo/test_framework.git 
ssh://server:/repo/project_a.git 

現在,建立project_a我增加了一個新的工作與多個Git倉庫(上面的)。我希望Hudson將存儲庫克隆到$WORKSPACE下的不同目錄中,因爲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 

我可以在哈德遜配置此更好地適應我們的項目設置?我是否需要爲每個項目創建一個本地的虛擬git存儲庫作爲git子模塊或其他東西?

回答

6

在Hudson中,您可以將多個作業鏈接在一起。您可以嘗試爲test_framework創建單獨的Hudson作業,爲project_a創建另一個作業。 Hudson爲每個作業在$ WORKSPACE中創建一個單獨的目錄,因此現在應該在$ WORKSPACE下有兩個不同的目錄。


設置鏈接

在project_a滾動的作業配置到生成後的行動和檢查建設等項目......在test_framework作爲項目建設進入。

在test_framework的作業配置中,確保Poll SCM未被選中,並且在其他項目設置爲project_a後生成。


它是如何工作

什麼現在你已經配置是project_a將輪詢SCM尋找變化,當發現​​它的變化會拉他們飯桶。運行構建步驟(如果有的話)並在完成時觸發test_framework作業以從git(如果有)中提取更改並運行構建步驟。

+1

1)我們爲什麼不能用「投票SCM」連同與「建立以後。」? 2)這個上/下游設置似乎會發生什麼,git回購將不會在兄弟目錄中。在上面的例子中,我們獲得了HUDSON_HOME/jobs/project_a/workspace和HUDSON_HOME/jobs/test_framework/workspace ..他們可以被帶到同一級別嗎? – inger 2010-12-14 23:54:20

6

「構建其他項目」解決方案的問題是,如果test_framework發生更改,則不會觸發project_a構建。相反,我建議放棄git的插件,並設立「執行shell」構建步驟有以下:

rm -rf ${WORKSPACE}/* 

git clone ssh://server:/repo/test_framework.git ${WORKSPACE}/test_framework 
cd ${WORKSPACE}/test_framework 
git fetch -t ssh://[email protected]:/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://[email protected]:/repo/project_a.git +refs/heads/*:refs/remotes/origin/* 
git ls-tree HEAD 

接下來,創建掛鉤文件「服務器:/repo/test_framework.git/hooks/post-receive」和「服務器:/repo/project_a.git/hooks/post-receive」具有以下內容:

#!/bin/sh 
curl http://hudson/job/job_name/build 

現在,每當更改推要麼庫,鉤子會用哈德森的API來觸發一個構建。

+2

這會重新克隆每一個構建? – inger 2010-12-14 23:56:20

1

我遇到了同樣的問題,目前通過爲每個項目創建一個作業並使用Copy Artifact Plugin來允許構建依賴作業,即使對它的依賴關係進行了Git更新(這是爲了避免在中間構建對我們依賴的項目進行更新)。

因此,project_a會從test_framework複製它需要的最新穩定構件,並且測試框架的更新將觸發project_a中的構建。project_a仍然可以通過Git中的更改觸發,它只是再次複製test_framework中的最新工件。

6

我意識到這個問題很古老,但我遇到了同樣的問題,並使用此頁來充實我自己的解決方案,似乎工作得很好(即使它有點複雜)。這個解決方案的大部分功勞應該去克林頓(我不願意提交這個答案的唯一原因是因爲他的回答似乎沒有解決需要位於同一個基本目錄中的多個存儲庫)。

假設您有兩個存儲庫(A和B)。

步驟:

1)請兩個項目來拉從遠程倉庫A碼和B.將在任一倉庫任何必要的構建步驟。

2)建立沒有任何源代碼管理的第三個目錄。一生成步驟添加到這個項目中來執行類似以下的shell命令:(你的路徑可能不一樣找一找自己!)

ln -s /var/lib/jenkins/jobs/A/workspace A 
ln -s /var/lib/jenkins/jobs/B/workspace B 

現在你可以添加任何其他構建步驟這取決於A和B是姐妹在一個目錄中。耶符號鏈接!

3)將三個任務連接在一起。拉任務的順序可能並不重要(你比我更瞭解),但沒有源代碼控制的任務應該是鏈中的最後一個環節。

+0

謝謝彼得。仍然相關! – pojo 2011-04-11 13:44:34

1

你所描述的問題在詹金斯錯誤追蹤系統已經申請爲錯誤:https://issues.jenkins-ci.org/browse/JENKINS-8082


我們使用的擴展項目作業配置「自定義工作空間」選項檢出我們的工作的一個倉庫到的子目錄另一份工作。

其他工作檢查出來的主目錄下的所有子模塊:

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)