2010-10-04 60 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