【发布时间】:2015-06-26 21:08:48
【问题描述】:
我想配置 jenkins,以便在 git 存储库的任何分支中发布新标签时它开始构建。如何配置此行为?
触发:
感谢您的帮助
【问题讨论】:
我想配置 jenkins,以便在 git 存储库的任何分支中发布新标签时它开始构建。如何配置此行为?
触发:
感谢您的帮助
【问题讨论】:
新标签是什么意思?它有一些模板名称吗?
您当然可以在 Advanced --> Refspec -->refs/tags/{tagname} 中定义它。
您甚至可以通过refs/tags/* 找到真正的任何新标签。
【讨论】:
git describe --tags 作为 shell 命令并从 git 获取最新标签。然后,您在某个属性文件中写入标签(以保存您已经为该标签运行了任务)并轮询另一个流,您将在其中传递标签名称并构建它。
将 refspec 设置为: +refs/tags/*:refs/remotes/origin/tags/*
分支说明符: **
在构建触发器下,在将更改推送到 GitHub 时检查构建
【讨论】:
**。让我解释一下原因:如果你做了一个提交,然后 Jenkins 工作轮询了 repo,那么你标记了...... Jenkins 不会检测到更改。如果您将分支说明符保留为**,然后执行相同的过程,那么即使没有引入新的提交,也会检测到您的新标签。所以,用户“albertski”几乎得到了正确答案,只需在“tags/”之后添加 ASTERISK。
请注意,the answer provided by stanjer 中的方法不会使 Jenkins 在新标签上触发构建,如果它们指向之前构建的提交。例如,您标记版本 v1.0.0(让 jenkins 部署此版本),然后在将来您必须回滚到 v1.0.0,再次标记其提交,但是使用 v1.0.0-rollback,Jenkins 不会部署您的回滚,因为它会检查标签指向的哈希值,而不是标签本身的哈希值。
总而言之,jenkins 只会在它们指向尚未标记的提交时构建新标记,而这目前是不可调整的。
如果可以使用 Jenkins 作为 CD 工具使用标签进行部署和回滚,那就太棒了。
更多信息在这里https://groups.google.com/forum/#!msg/jenkinsci-users/mYxtDNMz1ZI/xbX9-xM9BQAJ
【讨论】:
以前的对我不起作用。在我的例子中,refspec 用单引号括起来:
Refspec: '+refs/tags/*':'refs/remotes/origin/tags/*' 分支说明符:**/tags/**
我有 Jenkins 2.120。要使标签触发的工作工作需要执行以下步骤:
创建工作:
Refspec: '+refs/tags/*':'refs/remotes/origin/tags/*'
分支说明符:**/tags/**
运行构建
将相同的作业重新配置为参数:
Refspec: '+refs/tags/*':'refs/remotes/origin/tags/*'
分支说明符:**
运行构建
将相同的作业重新配置为参数:
Refspec: '+refs/tags/*':'refs/remotes/origin/tags/*' 分支说明符:**/tags/**
运行构建
只有在这个神奇的步骤之后,当我标记分支时它会自动触发 Jenkins
【讨论】:
@albertski 回答有效,但不要忘记以下附加设置: 1. 设置从 Bitbucket 到 Jenkins 的钩子 2.轮询单片机需要检查
您可以通过在您的 bitbucket 存储库中添加新的 git 标签来测试触发器。
【讨论】:
他们发布了一个新的“buildingTag”,可以在 when 块中使用。
buildingTag - A simple condition that just checks if the Pipeline is running against a tag in SCM, rather than a branch or a specific commit reference.
【讨论】:
@albertski 和 @Sergey 的组合答案对我有用。
路径:Jenkins > {YourJob} > 配置 > 管道 > 定义(来自 SCM 的管道脚本)> SCM(Git)
选项:
存储库 > 高级... > Refspec +refs/tags/v*:refs/remotes/origin/tags/v*
要构建的分支 > 分支说明符('any' 为空白) **/tags/v*
如果要构建以 v 开头的标签,请设置 v*,例如 v0.1.0、v1.0.5...
【讨论】: