当前位置: 首页 > 知识库问答 >
问题:

如何在Jenkins中一次远程触发一个构建?

江鹏
2023-03-14

这是如何配置Git后提交挂钩的扩展或变体

我的问题是,我不希望每次提交一次构建。相反,我想要的是一次触发一个构建的单个实例。当单个实例正在运行时,新的请求可能会累积,但在当前构建完成后,应该将它们合并到单个新构建中。

显然,触发应该在有意义的相关git版本上,通常来自同一个分支,并且构建应该始终在最靠近HEAD的触发版本上执行(这有意义吗?)。

因此,为了解决这个问题,假设每个人都在努力掌握,我放置了一个git钩子来触发构建。如何使挂起的请求合并到单个请求中,而不是作为单独的构建排队?

通过使用轮询可以轻松配置此行为,但我不想出于各种不相关的原因使用轮询(大量作业需要轮询单个作业消耗的多个repo)。

Jenkins参数化作业只对一个构建进行排队,这提供了一种可能性:使用“启动器”作业,该作业快速终止,并使用“组合排队git哈希”启动实际工作作业。这种方法的问题是,启动器作业需要在启动工作作业之前检查回购。考虑到大额git回购,这会带来无法接受的延迟。

共有1个答案

向杜吟
2023-03-14

您是否需要通过git钩子触发构建?

因为如果没有,您可以很容易地获得所需的行为,将作业触发器更改为具有适当超时的存储库轮询。让我们假设五分钟,这给了足够的时间让这些新的修订叠加起来并立即构建。

此外,您还可以使用Throttle Concurrent Builds插件并添加避免并发生成的约束。

编辑:还可以选择保留git挂钩,但添加一段安静的时间。这是Jenkins的核心功能,可通过管理Jenkins部分访问。

EDIT2:当我读到你的新评论时,我想到了参数化调度程序插件,并添加了一个参数来指定存储库URL,但这并不是轮询它的调度定期生成的更改,这不是你想要的。

根据新的要求,我会做一些听起来有点像Jerry Rig的事情:我会创建另一个名为“你的项目执行者”的工作,这个人会定期(每2分钟左右)构建并运行一个shell脚本,该脚本会有一个大的if-else块,如果给定的存储库有更改,git会获取并检查不同预定义存储库中的更改,然后,这将使用所需参数(REPO\u URL等)触发当前作业。

要检查更改,您可以将头部当前修订哈希存储在executor作业工作区的属性文件中,然后将其与git rev parse HEAD的输出进行比较。

 类似资料:
  • 问题内容: 我正在使用以下方法远程调用Jenkins作业: 这里job被调用,并且是我使用的安全令牌。 现在,我需要将一些参数传递给此作业的build.xml文件,即。 我还没有弄清楚如何传递变量。 问题答案: 请参阅Jenkins文档: 参数化构建 以下是您感兴趣的行:

  • 问题内容: 标题大多是这样说的。如何从远程git存储库触发Jenkins多分支管道项目构建? “ Trigger远程构建”构建触发器选项似乎不起作用,因为没有保存您设置的令牌。 问题答案: 目前(Jenkins 2.22),“触发触发器远程构建”构建触发选项在多分支管道作业配置中可见,但不起作用(如果您检查并指定了令牌,则无论如何保存后都会重置)。根据这个,这是故意的触发器不能确定,但一个错误,它

  • 问题内容: 这是我遇到的问题-我需要每2小时触发一次作业构建,但前提是存在git commit(如果没有活动,则跳过)。我可以单独解决它们,但不确定如何一起解决- 有人有什么好主意吗?我唯一能想到的是一个cron作业,该作业每2小时检查一次,并且在此期间是否有git commit,请手动触发作业,但这看起来并不那么优雅。 任何好的想法表示赞赏。 问题答案: 将詹金斯设置为每2小时(0 * / 2

  • Jenkins中是否有一个环境变量告诉我构建是手动运行还是通过轮询自动触发? 如果自动触发,我的管道就像一个超级按钮,但如果手动运行...它总是失败,所以我想我要编辑管道以检查构建是如何触发的。

  • 问题内容: 我正在使用Perl脚本使用LWP模块在Jenkins中触发构建。这行得通,但是执行完作业后,我想解析控制台输出。 有办法得到这个吗? 问题答案: 登录到Jenkins,并查看网页底部右侧附近的内容,然后单击链接。这将为您提供有关Jenkins RESTful API的信息 ,这是在您了解如何构造URL后从Jenkins提取信息的好方法。 并且,这是获取控制台文本的方法: 您可以使用Pe

  • 问题内容: 我希望根据我的构建触发方式向我的Jenkinsfile添加一个条件阶段。目前,我们的设置是通过以下方式触发的: 分支索引中获取的git repo更改 用户使用用户界面中的“立即构建”按钮手动触发构建。 有什么方法可以运行不同的流水线步骤,具体取决于其中哪些操作触发了构建? 问题答案: 以下代码可以确定用户是否已启动管道或计时器/其他触发器: