【问题标题】:jenkins trigger build if new tag is released如果发布了新标签,jenkins 将触发构建
【发布时间】:2015-06-26 21:08:48
【问题描述】:

我想配置 jenkins,以便在 git 存储库的任何分支中发布新标签时它开始构建。如何配置此行为?

触发:

感谢您的帮助

【问题讨论】:

    标签: git jenkins tags


    【解决方案1】:

    新标签是什么意思?它有一些模板名称吗?

    您当然可以在 Advanced --> Refspec -->refs/tags/{tagname} 中定义它。

    您甚至可以通过refs/tags/* 找到真正的任何新标签。

    【讨论】:

    • 是的,如果 /tags 文件夹中发布了新标签,我希望 jenkins 开始构建。我尝试将 /tags/* 添加到分支说明符,但它对我不起作用
    • 您是否尝试过我在回答中显示的方式?您应该定义一个标签组并按照我的屏幕截图所示使用它们。
    • 是的,我试过了,它成功了一半。如果我将版本标记为最新版本而不是标记较旧的版本,它会起作用。如果在任何修订版上标记了新标签,我希望詹金斯开始构建。我使用了 +refs/tags/*:refs/remotes/uw/tags/* 类似于您在 refspec 中的示例。我错过了什么吗?
    • 好吧,我发现如果我不更改源代码 jenkins 将不会开始构建标签,即使它是最新版本。但是在我们的例子中,即使源没有变化,也有必要触发构建。如果创建了新标签,jenkins 无论如何都应该构建它。
    • 是的,知道了。仅当新代码持续存在时,才会在轮询后触发 Git。这是该插件的主要规则,因此无法仅使用 git 插件解决问题。我可以建议你的事情是完成 2 个任务。第一个任务每 N 分钟运行一次,并且只使用控制台。您正在执行 git describe --tags 作为 shell 命令并从 git 获取最新标签。然后,您在某个属性文件中写入标签(以保存您已经为该标签运行了任务)并轮询另一个流,您将在其中传递标签名称并构建它。
    【解决方案2】:

    将 refspec 设置为: +refs/tags/*:refs/remotes/origin/tags/*

    分支说明符: **

    在构建触发器下,在将更改推送到 GitHub 时检查构建

    【讨论】:

    • 您忘记了 refspec 的星星:+refs/tags/*:refs/remotes/origin/tags/*。此外,分支说明符 (*) 没有帮助,但 "refs/tags/" 做到了。现在它只被标记的提交触发。
    • 我已更正:分支说明符必须是 **。让我解释一下原因:如果你做了一个提交,然后 Jenkins 工作轮询了 repo,那么你标记了...... Jenkins 不会检测到更改。如果您将分支说明符保留为**,然后执行相同的过程,那么即使没有引入新的提交,也会检测到您的新标签。所以,用户“albertski”几乎得到了正确答案,只需在“tags/”之后添加 ASTERISK。
    【解决方案3】:

    请注意,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

    【讨论】:

    【解决方案4】:

    以前的对我不起作用。在我的例子中,refspec 用单引号括起来:

    Refspec: '+refs/tags/*':'refs/remotes/origin/tags/*' 分支说明符:**/tags/**

    我有 Jenkins 2.120。要使标签触发的工作工作需要执行以下步骤:

    1. 创建工作:

      Refspec: '+refs/tags/*':'refs/remotes/origin/tags/*'

      分支说明符:**/tags/**

    2. 运行构建

    3. 将相同的作业重新配置为参数:

      Refspec: '+refs/tags/*':'refs/remotes/origin/tags/*'

      分支说明符:**

    4. 运行构建

    5. 将相同的作业重新配置为参数:

      Refspec: '+refs/tags/*':'refs/remotes/origin/tags/*' 分支说明符:**/tags/**

    6. 运行构建

    只有在这个神奇的步骤之后,当我标记分支时它会自动触发 Jenkins

    【讨论】:

    • 这对我也不起作用。我在github端添加了钩子,可以看到在github(企业版)上正确触发了钩子。但仍然无法触发在 Jenkins 上运行的作业。安装了 git 插件并检查了构建触发器“GitHub hook trigger for GITScm polling”。不知道为什么它不起作用。但是当我在 github 上将事件更改为“Pushes”时,触发器就会起作用!那么问题是如何在创建标签时触发 jenkins 作业?
    【解决方案5】:

    @albertski 回答有效,但不要忘记以下附加设置: 1. 设置从 Bitbucket 到 Jenkins 的钩子 2.轮询单片机需要检查

    您可以通过在您的 bitbucket 存储库中添加新的 git 标签来测试触发器。

    【讨论】:

      【解决方案6】:

      他们发布了一个新的“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.
      

      https://jenkins.io/blog/2018/04/09/whats-in-declarative/

      【讨论】:

        【解决方案7】:

        @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...

        【讨论】:

          猜你喜欢
          • 2017-12-25
          • 2015-11-29
          • 1970-01-01
          • 1970-01-01
          • 2019-07-15
          • 1970-01-01
          • 1970-01-01
          • 2019-04-09
          • 2013-04-24
          相关资源
          最近更新 更多