我有两件不立即兼容的事情:
- 旧内容:几个 Jenkins Build-server 作业必须每天执行一次或多次,目前已配置 cron 以在特定时间触发。这些作业有时会运行数小时,并且其运行时间不可预测。
- 新内容:全球 IT 部门坚持认为他们必须能够根据需要修补和重新启动任何 Jenkins 服务器和/或代理 - 尽管是在某些已知的维护时段内。
- 该窗口可以用 cron 语法描述为“30 15 19-25 * 6”到“00 20 19-25 * 6”
维护的增加至少会在以下方面破坏现状:
- 当一项工作应该开始时,詹金斯可能没有运行。
- 正在运行的 Jenkins 作业意外终止。
在这两种情况下,都需要一种方法来检测给定作业是否在特定时间启动并允许“自然”完成其过程。无论哪种情况,都应尽快安排作业。
我自然而然地要求 IT 部门允许我们以与我们的系统兼容的方式来执行此操作,但这在十年内是不会发生的。:-(
我现在正在考虑如何处理它。我目前的想法是:
- 尽量减少损失
- 使用 Windows cron 在维护窗口之前关闭 Jenkins 服务 - 确保它无法在维护窗口期间启动,并在维护期后启动 Jenkins 服务。 (我在这里考虑触发两个脚本,这将间接修改注册表中的服务启动设置。)
- 为了修复损坏,请在维护后的首次启动时运行单独的 Jenkins 作业,并使用 Groovy 脚本执行以下操作
- 扫描一组已知作业,查找在服务窗口开始时过早结束的作业。
- 扫描一组已知作业,查找应该在维护窗口期间启动的作业,
- 对于步骤 2 中找到的每个作业,根据其原始开始时间确定优先级,逐一重建它们。
但这看起来是一项复杂的任务,而且管理起来可能非常困难。
我还有什么其他选择?