确保 Jenkins 作业在指定的 cron 时间或之后运行一次 - 即使 Jenkins 没有在指定的 cron 时间运行

确保 Jenkins 作业在指定的 cron 时间或之后运行一次 - 即使 Jenkins 没有在指定的 cron 时间运行

我有两件不立即兼容的事情:

  1. 旧内容:几个 Jenkins Build-server 作业必须每天执行一次或多次,目前已配置 cron 以在特定时间触发。这些作业有时会运行数小时,并且其运行时间不可预测。
  2. 新内容:全球 IT 部门坚持认为他们必须能够根据需要修补和重新启动任何 Jenkins 服务器和/或代理 - 尽管是在某些已知的维护时段内。
    • 该窗口可以用 cron 语法描述为“30 15 19-25 * 6”到“00 20 19-25 * 6”

维护的增加至少会在以下方面破坏现状:

  • 当一项工作应该开始时,詹金斯可能没有运行。
  • 正在运行的 Jenkins 作业意外终止。

在这两种情况下,都需要一种方法来检测给定作业是否在特定时间启动并允许“自然”完成其过程。无论哪种情况,都应尽快安排作业。

我自然而然地要求 IT 部门允许我们以与我们的系统兼容的方式来执行此操作,但这在十年内是不会发生的。:-(

我现在正在考虑如何处理它。我目前的想法是:

  1. 尽量减少损失
    • 使用 Windows cron 在维护窗口之前关闭 Jenkins 服务 - 确保它无法在维护窗口期间启动,并在维护期后启动 Jenkins 服务。 (我在这里考虑触发两个脚本,这将间接修改注册表中的服务启动设置。)
  2. 为了修复损坏,请在维护后的首次启动时运行单独的 Jenkins 作业,并使用 Groovy 脚本执行以下操作
    • 扫描一组已知作业,查找在服务窗口开始时过早结束的作业。
    • 扫描一组已知作业,查找应该在维护窗口期间启动的作业,
  3. 对于步骤 2 中找到的每个作业,根据其原始开始时间确定优先级,逐一重建它们。

但这看起来是一项复杂的任务,而且管理起来可能非常困难。

我还有什么其他选择

相关内容