如何阻止 Jenkins 对先前分支进行新构建调度

108次阅读
没有评论

问题描述

在使用 Jenkins 构建作业时遇到了一个问题。当有变更推送到 Bitbucket 时,作业会运行一次。在第一次运行后,日志会显示已检测到仓库中的 X 个分支,并调度作业在所有新发现的分支上进行构建,无论这些分支有多旧。这意味着在追赶进度之前,可能需要在 500 个分支上运行一套新的单元测试,即使这些分支非常旧,我们知道它们在开始之前就会失败。

用户想知道是否有方法可以阻止这种“回顾”行为。他不希望调度所有额外的构建,而是希望作业仅在新的推送情况下运行,忽略旧分支,直到对它们进行推送为止。

附注:用户已经意识到仓库中存在过多的旧分支,但这不是他的决定,他无法做出更改。同时,他知道可以关闭 Bitbucket 的通知,这样作业就不会报告,但这实际上仍然会浪费资源。

解决方案

以下是阻止 Jenkins 对先前分支进行新构建调度的解决方案:

方案1:在分支推送前添加标记以跳过构建

这个方法需要在每个分支推送之前添加一个特定的提交信息,以告诉 Jenkins 跳过对该分支的构建。这在大多数 CI 系统中都适用,包括 Jenkins。

  1. 在将分支推送到仓库之前,在每个分支上添加一个提交。
  2. 在提交信息中添加 [skip ci] 标记,以指示 Jenkins 跳过构建。
  3. 推送分支。

这个方法的优点是简单直接,但需要在每个分支上都进行额外的工作。

方案2:使用 Jenkins Bitbucket Branch Source 插件

如果你的 Jenkins 作业使用了 Bitbucket 作为源代码仓库,并且你使用了 Bitbucket Branch Source 插件,那么可以通过以下步骤来配置作业,以阻止对先前分支进行构建调度:

  1. 确保你的 Jenkins 已安装并配置了 Bitbucket Branch Source 插件。
  2. 在 Jenkins 中创建或编辑你的作业。
  3. 在作业配置中,找到 “Branch Sources” 部分,并启用 “Discover branches” 选项。
  4. 在 “Discover branches” 部分中,找到 “Build strategies” 部分,并选择 “Exclude branches that are already built” 选项。
  5. 保存作业配置。

这样配置后,Jenkins 将不会对已经构建过的分支进行新的构建调度,只会关注新推送的分支。

方案3:自定义构建触发逻辑

如果你想要更精细的控制,可以在 Jenkins 作业中自定义构建触发逻辑。你可以使用 Jenkins Pipeline 或脚本来编写构建触发条件,只在满足特定条件时才进行构建。

以上是阻止 Jenkins 对先前分支进行新构建调度的几种解决方案。你可以根据你的具体情况选择其中一种或多种方案来实现你的需求。

注意:在应用任何解决方案之前,请确保在测试环境中进行测试,以确保它符合你的预期,并不会引入其他问题。根据你的 Jenkins 版本和配置,某些操作可能会有所不同,因此请仔细阅读相关文档或资料。

正文完