繁体   English   中英

推动分支被解释为推动主节点

[英]Pushing a branch interpreted as pushing master

环境:

  • Jenkings项目仅构建Git存储库的“ master”分支。
  • 一个带有接收后挂钩的Git存储库,用于通知Jenkins新更改(使用Git 1.7.10)。 尽管脚本告诉Jenkins有新的更改,但是当Jenkins扫描存储库时,如果更改不在“ master”分支中,它将不会触发构建。

问题

10天前,开发人员将提交提交到远程主服务器。 Jenkins项目是5天前建立的。 昨天,第二位开发人员撤消了更改,创建了一个新分支并将其推回远程。 即,母版中的任何内容均未更改。 但是,Jenkins项目启动了。查看Jenkins检测到的更改,这是10天前第一位开发人员所做的最后一次提交触发了构建。

我意识到这个问题尚未得到解决。.这就是我当时修复它的方式..

原因

Jenkins的构建是从我们的Git存储库的“ 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天之前,所以它将其注册为导致构建的更改。

解决方案(仅在按下主服务器时才排队构建)

更改挂钩脚本以仅构建主推送。

#!/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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM