前几天给公司一个git项目创建了一个分支。原来的分支为"branchA",新的分支是"branchB",相应的在jenkins中部署任务分别是"jobA"和"jobB"。
在执行jobB成功后,进行jobA不能进行分支切换,尝试在构建前使用"execute shell"执行脚本,git checkout 到branchA。开始以为问题解决了,但是在branchA提交了几个commit后进行jobA部署。出现问题,jenkins在git取代码时总是取的branchB。我明明在构建前的脚本里指定了"git checkout branchA"。
查看jenkins部署日志取代码的部分。
<pre> > git rev-parse --is-inside-work-tree Fetching changes from the remote Git repository > git config remote.origin.url ssh://gerrit/project Fetching upstream changes from ssh://gerrit/project > git --version > git fetch --tags --progress ssh://gerrit/tms-provider +refs/heads/*:refs/remotes/origin/* > git rev-parse FETCH_HEAD^{commit} Checking out Revision 4b640f***** (branchA) > git config core.sparsecheckout > git checkout -f 4b640f**** > git rev-parse FETCH_HEAD^{commit} > git rev-list 87cce3*** </pre>
我在本地的git历史中可以看到当前branchA的最新commit是dba05****,而构建服务器上执行fetch后的FETCH_HEAD指向的确实另一个分支branchB的最新commit。(不明白为什么会总指向另一个分支的commit,有熟悉git的同学可以交流指导下啊。)
当然修改还是比较容易的,在fetch的时候直接指定具体引用,这样在fetch代码时就会只fetch指定分支的了。 Refspec:+refs/heads/branchname:refs/remotes/origin/branchname