mil*_*lus 17 git hudson git-checkout
我的Ant build.xml脚本以
<property environment="env"/>
<echo>GIT_BRANCH = ${env.GIT_BRANCH}</echo>
<echo>PWD = ${env.PWD}</echo>
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
从控制台输出,Hudson知道它正在构建主题分支DPM-48但是没有设置环境变量GIT_BRANCH并且'git branch'返回git处于'分离的HEAD'状态
* (no branch)
master
DPM-48
Run Code Online (Sandbox Code Playgroud)
我想知道的是我正在哈德森建立的分支.必须有办法做到这一点.
mil*_*lus 33
解决
看到abayer在Hudson bug 6856中的评论后,我采取了以下步骤:
构建日志显示
[workspace] $ git.exe checkout -b ChangeTester d6caef27759495c5714923c1ddf19551a70d6083
Run Code Online (Sandbox Code Playgroud)
代替
[workspace] $ git.exe checkout -f d6caef27759495c5714923c1ddf19551a70d6083
Run Code Online (Sandbox Code Playgroud)
这意味着我不处于'独立头'状态,因此可以提交,创建标签和推送.
我可以使用'git rev-parse HEAD'来获取提交哈希并在'git show-ref'的输出中找到它,以便在需要时找到分支的真实名称.
我现在能够将成功的构建标记推送到我的git仓库.
Von*_*onC 10
注意:OP milkplus的评论是指最近的Hudson bug 6856(2010年6月),其中提到:
无论如何,Git都会以独立的头部构建
虽然不清楚这个特定问题是否会得到解决(答案表明它可能实际上"按设计工作"!),但它也引用了这个版本的hudson Git插件,允许签出本地分支.
你是一个DETACHED HEAD
因为,因为git插件现在正在工作,它确实直接签出提交SHA1,而不是分支HEAD
.
HEAD
分离时你所处的状态不会被任何分支记录(这很自然 - 你不在任何分支上).这意味着您可以通过切换回现有分支来丢弃临时提交和合并.
您的构建脚本可能首先尝试查找相关提交来自哪个分支.
通过查看Hudson Git插件的源代码实现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);
}
}
Run Code Online (Sandbox Code Playgroud)
设置了一个环境变量GIT_BRANCH
,但它在xml构建脚本中似乎没有任何值:
<property environment="env"/>
<echo>GIT_BRANCH = ${env.GIT_BRANCH}</echo>
Run Code Online (Sandbox Code Playgroud)
如果是这种情况,可能是因为问题7554:
GIT_BRANCH
选择多个分支进行构建时不设置在尝试识别当前构建的分支时,我发现
GIT_BRANCH
当选择构建多个分支时,不会设置环境变量.我认为这不是一个真正的bug,而是一个功能请求 -
GIT_BRANCH
只有在有一个分支时才设置env var,因此,如果/当有多个分支时,它就不相关了.我不确定在这种情况下我们如何为多个分支格式化env var.我认为
GIT_BRANCH
应该设置为当前正在构建的分支.就像构建在master上一样,它将包含master.这将有助于例如推送到在此构建期间构建的另一个远程分支.或者使用要构建的正确分支集触发另一个Build.
由于某种原因,Git插件开始为
GIT_BRANCH
环境变量传递null值.
这导致Maven插件在System.getProperties().putAll(systemProps)
通话中失败.解决方案是使用"
master
"作为默认Git分支而不是"**
"或空字符串.
归档时间: |
|
查看次数: |
11211 次 |
最近记录: |