My Ant build.xml脚本以
开头<property environment="env"/>
<echo>GIT_BRANCH = ${env.GIT_BRANCH}</echo>
<echo>PWD = ${env.PWD}</echo>
Hudson 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
从控制台输出中,Hudson知道它正在构建主题分支DPM-48但是没有设置环境变量GIT_BRANCH并且'git branch'返回git处于'分离的HEAD'状态
* (no branch)
master
DPM-48
我想知道的是我在哈德森建立的分支。必须有办法做到这一点。
答案 0 :(得分:33)
分辨
在Hudson bug 6856看到abayer的评论后,我采取了以下步骤:
构建日志显示
[workspace] $ git.exe checkout -b ChangeTester d6caef27759495c5714923c1ddf19551a70d6083
而不是
[workspace] $ git.exe checkout -f d6caef27759495c5714923c1ddf19551a70d6083
这意味着我不处于'独立头'状态,因此可以提交,创建标签和推送。
我可以使用'git rev-parse HEAD'来获取提交哈希,并在'git show-ref'的输出中找到它,以便在需要时找到分支的真实名称。
我现在能够将成功的构建标记推送到我的git repo。
答案 1 :(得分: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。
通过查看milkplus来实现OP source code of the Hudson Git Plugin:
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仅在有一个分支时才设置,因此,如果/当有多个分支时,它就不相关分支机构。我不确定在这种情况下我们如何为多个分支格式化env var。我认为
GIT_BRANCH
应设置为当前正在构建的分支。 就像构建在master上一样,它将包含master。这将有助于例如推送到另一个远程构建期间构建的分支。 或者使用要构建的正确分支集触发另一个Build。
由于某种原因,Git插件开始为
GIT_BRANCH
环境变量传递空值 这导致Maven插件在System.getProperties().putAll(systemProps)
调用中失败。解决方案是使用“
master
”作为默认Git分支而不是“**
”或空字符串。
答案 2 :(得分:2)
非常感谢您分享此解决方案!
我找到这个可选对话框来设置本地分支时遇到了一些麻烦 - 并且向其他人展示这也是当前的方法,在2015年我还要附上jenkins当前gui对话框的一些截图。