我们希望使用Jenkins在特定项目里程碑上生成发布/部署 . 当标记被推送到Git存储库时,是否可以触发Jenkins管道(在Jenkinsfile或Groovy脚本中定义)?
我们托管私有Gitlab服务器,因此Github解决方案不适用于我们的案例 .
目前这是管道/多分支工作流程中非常缺乏的东西 . 在这附近看到一张票:https://issues.jenkins-ci.org/browse/JENKINS-34395
如果您不反对使用发布分支而不是标记,您可能会发现它更容易 . 例如,如果您决定将所有以 release- 开头的分支视为"release branches",那么您可以...
release-
if( env.BRANCH_NAME.startsWith("release-") ) { // groovy code on release goes here }
如果您需要使用 release- 之后的名称,例如 release-10.1 变成 10.1 ,只需创建一个这样的变量......
release-10.1
10.1
if( env.BRANCH_NAME.startsWith("release-") ) { def releaseName = env.BRANCH_NAME.drop(8) }
这两者可能需要一些方法白名单才能起作用 .
我有同样的愿望并推出了自己的愿望,也许并不漂亮,但它有效...
在管道作业中,标记“此项目已参数化”并为您的标记添加参数 . 然后在管道脚本中签出标记(如果存在) .
创建一个运行脚本的自由式作业:
结帐
运行git describe --tags --abbrev = 0以获取最新标记 .
根据正在运行的构建列表(如文件中)检查该标记 .
如果未发生构建,则通过将标记作为参数传递的URL触发管道作业(在"Build Triggers"下的管道作业中设置“远程构建触发器(例如,从脚本),它将显示正确的URL .
将标记添加到正在运行的构建列表中,以便不再触发它 .
经常运行此作业 .
2 回答
目前这是管道/多分支工作流程中非常缺乏的东西 . 在这附近看到一张票:https://issues.jenkins-ci.org/browse/JENKINS-34395
如果您不反对使用发布分支而不是标记,您可能会发现它更容易 . 例如,如果您决定将所有以
release-
开头的分支视为"release branches",那么您可以...如果您需要使用
release-
之后的名称,例如release-10.1
变成10.1
,只需创建一个这样的变量......这两者可能需要一些方法白名单才能起作用 .
我有同样的愿望并推出了自己的愿望,也许并不漂亮,但它有效...
在管道作业中,标记“此项目已参数化”并为您的标记添加参数 . 然后在管道脚本中签出标记(如果存在) .
创建一个运行脚本的自由式作业:
结帐
运行git describe --tags --abbrev = 0以获取最新标记 .
根据正在运行的构建列表(如文件中)检查该标记 .
如果未发生构建,则通过将标记作为参数传递的URL触发管道作业(在"Build Triggers"下的管道作业中设置“远程构建触发器(例如,从脚本),它将显示正确的URL .
将标记添加到正在运行的构建列表中,以便不再触发它 .
经常运行此作业 .