推动分支被解释为推动主人

时间:2013-01-24 00:46:58

标签: git jenkins

环境:

  • Jenkings项目只构建Git存储库的“master”分支。
  • 带有post-receive挂钩的Git存储库,用于通知Jenkins新的更改(使用Git 1.7.10)。虽然脚本告诉Jenkins有新的更改,但是当Jenkins扫描存储库时,如果更改不在“master”分支中,它将不会触发构建。

问题

开发人员在10天前将提交推送到远程主服务器。 Jenkins项目是在5天前成立的。昨天,第二个开发人员撤回了更改,创建了一个新分支并将其推回远程。也就是说,主人没有改变。然而,Jenkins项目开始了。看看Jenkins发现的变化,这是10天前第一个开发人员最后一次提交触发构建的。

1 个答案:

答案 0 :(得分:2)

我意识到这个问题还没有得到解答..这就是我当时修复它的方法..

<强>原因

Jenkins的构建是从我们的Git repo的“post-receive”钩子脚本触发的:

#!/bin/bash
while read oldrev newrev refname
do
    true
done

curl http://jenkins/git/notifyCommit?url=ssh://git@devserver/repos/particualr_repo.git

可以看出,脚本读取stdin然后忽略它。因此,当从任何分支推送提交时,构建就会启动。但是,由于我们的构建项目被配置为构建master,并且自上次提交到master之后是10天之前,它将其注册为导致构建的更改。

解决方案(仅在推送母版时排队构建)

将钩子脚本更改为仅构建仅按下master。

#!/bin/bash

if ! [ -t 0 ]; then
   read -a ref
fi

IFS='/' read -ra REF <<< "${ref[2]}"
branch="${REF[2]}"

if [ "master" == "$branch" ]; then
   curl http://jenkins/git/notifyCommit?url=ssh://git@devserver/repos/particualr_repo.git
fi