背景
原有的jenkinsfile模板,在创建流水线时,代码分支这里可以输入master,release**,甚至正则表达式方式,实现checkout所需分支的代码。
如上图,原有的jenkinsfile模板,分支名可以输入release/1.0.8这样具体分支名,也可以输入release**匹配release/1.0.8,release/1.0.2等分支,也可以冒号开头的正则表达式匹配所需分支,但是不支持通过commit来checkout代码,如果输入特定git commit,流水线会报错。
需求解决
git原生是支持通过commit来checkout代码的,参考jenkins官网,发现jenkinsfile的checkout方法,也是支持commit来拉取代码的,于是修改jenkinsfile模板如下
如上图,在jenkinsfile模板里面的函数,增加一个逻辑判断,判断分支名是否包含--commit,如果含此字段,将--commit后面的输入当做分支名返回。经测试,可以实现commit来checkout代码的需求。
测试截图如下
如上图,checkout代码时,按照输入的0970fcbb0fb的git commit拉取了特定代码,显示为detached模式。
不足
1.需要分支名输入这里,通过--commit显性表明输入的为git commit。参考jenkins官网,git commit和冒号开头的分支正则表达式,都是可以直接在jenkinsfile的checkout方法直接传入使用的,因此自定义的jenkinsfile模板里面的分支判断函数,git commit的判断和第一条冒号开头的正则表达式的判断,是可以合并的,但是暂未找到可以匹配git commit但不匹配具体分支名的正则表达式写法。
2.自定义的jenkinsfile模板里面的分支判断函数,release**的分支匹配判断和具体分支写法(如release/1.0.8)的判断,也是可以合并的。
参考:
https://jenkins.io/doc/pipeline/steps/workflow-scm-step/#code-checkout-code-general-scm