2010-10-04 62 views
17

我的Ant build.xml腳本與活動的Git分支哈德森CI「(無分支)」

<property environment="env"/> 
<echo>GIT_BRANCH = ${env.GIT_BRANCH}</echo> 
<echo>PWD = ${env.PWD}</echo> 

哈德森CI開始是建立在構建任何分支的變化。控制檯輸出...

Commencing build of Revision 90906a63929e9074035eb5b10c71ee055ad3e13c (origin/DPM-48) 
GitAPI created 
Checking out Revision 90906a63929e9074035eb5b10c71ee055ad3e13c (origin/DPM-48) 
[workspace] $ git.exe checkout -f 90906a63929e9074035eb5b10c71ee055ad3e13c 
[workspace] $ cmd.exe /C '"C:\Program Files\WinAnt\bin\ant.bat" -file build.xml ...' 
[echo] GIT_BRANCH = ${env.GIT_BRANCH} 
[echo] PWD = /cygdrive/d/.hudson 

從控制檯輸出,哈德森知道它是建立局部分支DPM-48,但環境變量GIT_BRANCH未設置和「git的分支」返回Git是在「分離的頭」狀態

* (no branch) 
master 
DPM-48 

我想知道的是我在哈得遜建造的哪個分支。必須有辦法做到這一點。

+0

http://github.com/hudson/Hudson-GIT-plugin/blob/master/src/main/java/hudson/plugins/git/GitSCM.java我發現Git的用於Hudson的SCM插件覆蓋了一個buildEnvVars()方法來設置GIT_BRANCH環境變量,但它不會通過來訪問螞蟻腳本,GIT_BRANCH = $ {env.GIT_BRANCH} – milkplus 2010-10-05 00:29:56

+0

好點,我已將它整合到我的答案中,並提及可能解釋您目前情況的問題。 – VonC 2010-10-05 04:15:18

+0

http://issues.hudson-ci.org/browse/HUDSON-6856似乎意味着哈德森的分支問題可能會得到解決。我要確保我有最新版本的哈德森和git插件。 – milkplus 2010-10-05 19:15:42

回答

32

議決

眼看着abayer評論中Hudson bug 6856後,我採取了以下措施:

  • 使用哈德遜插件管理器,我更新了我的哈德遜Git的插件版本1.1),以獲得abayer的固定。
  • 使用哈德森作業配置,我點擊「源代碼管理」 - >「分支構建」下的「高級」按鈕。然後,我改變了「使用本地分支」來使用某個名稱。沒關係。
  • 然後我點擊了 「保存」 按鈕,並以 「現在構建」

alt text

構建日誌顯示

[workspace] $ git.exe checkout -b ChangeTester d6caef27759495c5714923c1ddf19551a70d6083 

而不是

[workspace] $ git.exe checkout -f d6caef27759495c5714923c1ddf19551a70d6083 
開始構建

這意味着我不處於「獨立頭」狀態,可以因此做提交,創建標籤和推送。

我可以使用'git rev-parse HEAD'獲取提交散列,並在'git show-ref'的輸出中找到需要它的分支的真實名稱。

我現在可以將成功的構建標籤推送到我的git倉庫。

+0

優秀的反饋! +1 – VonC 2010-10-29 21:18:03

+1

我浪費了幾個小時試圖找出這一個......謝謝! – 2014-01-17 14:42:42

+0

This line up this this too too http://jenkins-ci.361315.n4.nabble.com/git-plugin-after-checkout-not-on-any-branch-tp4673842p4673855.html – 2014-05-02 17:09:55

10

注:OP milkplus的評論提到最近Hudson bug 6856(2010年6月),其中提到:

Git的建立與分離的頭不管雖然目前還不清楚什麼

那個特定的問題將被解決(答案表明它可能實際上「按照設計工作」!),它也指this version of hudson Git Plugin,允許結賬本地分支。


你是在一個DETACHED HEAD,因爲作爲git的插件現在工作的權利,但它確實結賬直接提交SHA1,而不是一個分支HEAD

你的狀態,而你的HEAD分離不是任何分支記錄(這是很自然的 - 你不在任何分支)。 這意味着您可以通過切換回現有分支來放棄臨時提交和合並。

您的建築腳本可以先嚐試find what branch the relevant commit is coming from


正如看source code of the Hudson Git Plugin實現了OP milkplus

public void buildEnvVars(AbstractBuild build, java.util.Map<String, String> env) { 
    super.buildEnvVars(build, env); 
    String branch = getSingleBranch(build); 
    if(branch != null){ 
     env.put(GIT_BRANCH, branch); 
    } 
} 

環境變量GIT_BRANCH設置,但它似乎沒有在XML構建腳本的任何值:

<property environment="env"/> 
<echo>GIT_BRANCH = ${env.GIT_BRANCH}</echo> 

如果是這樣的話,可能是因爲issue 7554

GIT_BRANCH當選擇了構建多個分支沒有設置

當嘗試識別當前的構建是基於哪一個分支,我發現GIT_BRANCH環境變量未設置時,更多的則單分支被選中建立。

這是不是真的這麼多的功能要求的錯誤,我想 - 如果有一個分支GIT_BRANCH的環境變量只能設置,所以正因爲如此,如果/當有多個分支,它是不相關。我不確定我們如何在此上下文中爲多個分支格式化env var。

我認爲GIT_BRANCH應設置爲當前正在建設的分支。 就像構建版本在主版本上一樣,它將包含主版本。

這將有助於例如推送到另一個遠程,該構建過程中構建的分支。 或者使用正確的分支集來觸發另一個Build。

NPE described here

alt text

出於某種原因的種類GIT中的插件開始傳遞null值GIT_BRANCH環境變量。
這導致Maven插件在System.getProperties().putAll(systemProps)調用中失敗。

解決方案是使用「master」作爲默認Git分支而不是「**」或空字符串。

+0

這就是問題所在。我不知道如何找到觸發Hudson構建的分支名稱。 – milkplus 2010-10-04 19:58:24

+1

@milkplus:但我提到的鏈接應該包含各種腳本(包括我的答案中的「what-branch」腳本),以便找出分支名稱。 – VonC 2010-10-04 19:59:33

2

非常感謝您分享此解決方案!

我找到這個可選對話框來設置本地分支 - 並向其他人展示這也是2015年的當前方法,我將附上jenkins當前gui對話框的一些截圖。

enter image description hereenter image description here