一 问题描述
Gitlab钩子触发Jenkins自动构建,Gitlab拿到的分支并非触发构建的分支。如gitlab提交代码的分支是master分支,而Jenkins上scm填入的默认分支是*/develop分支,任务触发后,看到的还是develop分支,如下截图:
二 问题定位
首先,通过google或百度搜索是否有人遇到过类似这种问题,最终没找到答案。
然后偶然发现,有些jenkins的任务又不会出现此类问题,都是相同的流水线,那问题出在哪里呢?
于是,开始对比两个jenkins任务的区别,发现配置没啥区别,仅仅一个地方不同,gitlab仓库地址一个用了IP方式,一个用的是域名方式,而IP方式的都有问题。莫非是这个不同导致的。
于是,尝试修改成了域名方式,发现居然成功了,如下:
三 原因分析
我们的gitlab前不久我给配置上了域名(以前未配置),故推送的消息里,都是仓库地址都是域名方式的,如下:
但是,jenkins任务里配置的是IP,明显与推送过来的仓库不匹配,不匹配的情况下,check scm的机制是会用任务里配置的仓库和分支去checkout,如此不管触发钩子的是哪个分支,都只会使用jenkins任务里配置的,所以,就无法使用触发钩子的分支构建。
这个问题,虽然只是一个小问题,但是却花了我不少时间定位,以此记录一下,也可以帮助同样碰到这类问题的朋友快速找到问题并予以修正。