修改jenkinsfile模板使流水线支持通过git commit拉取代码

背景

      原有的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

原文地址:https://www.cnblogs.com/360linux/p/13062052.html