如何将长时间延迟合并到 Jenkins 构建过程中?

How can I incorporate a long delay into a Jenkins build process?

我正在使用 Jenkins 将更改部署到管理和 运行 每天安排的许多不同作业的系统。我们有一个不会写入真实数据库的暂存设置,以及一个会写入的生产设置。

我希望在推送更改时发生的 Jenkins 流程是这样的

  1. 运行 检查。
  2. 部署到暂存系统。
  3. 等待 24 小时。
  4. 检查日志以确保暂存系统在过去 24 小时内没有任何错误。
  5. 部署到生产系统。

在任何时候都可能 运行 同时存在不止一个这样的构建 - 例如。我在上午 11 点推送更改,它们被部署到暂存区。下午 5 点,我推送了更多更改,它们也被部署到暂存区。第二天上午 11 点,第一组更改仅部署到生产环境。当天下午 5 点部署第二组更改。

现在,我已经成功地构建了一个系统来执行此操作,方法是使用 Build Flow 插件,并创建一个名为 wait_one_day 的作业,其中 运行s sleep $((24 * 60 * 60)) 在 bash shell.

这似乎不是最优雅的解决方案,缺点是我要占用两个构建执行器 24 小时(一个用于构建流程作业,另一个用于 wait_one_day),每个是时候我们做出改变了。

是否有更好的方法或任何旨在帮助完成此过程的插件? Jenkins 作业是否可以一次性将另一个 Jenkins 作业安排到 运行?

如果有人对我的设计有任何建议或建设性批评,我同样很乐意听到解决同一问题的替代方法。

recently that I answered, although I'm not sure that 完全符合您的情况。

您可能会动态创建一个执行第 4 步和第 5 步的作业,该作业将 运行 每 24 小时定期执行一次。这里的问题是你实际上只会 运行 这个作业一次,并且在那个作业中有一个构建步骤会删除它自己(groovy 代码或 shell 脚本)。创建一个停用的模板作业很容易,您只需克隆它,然后针对特定任务对其进行修改。需要一个中间作业,它会在 运行 的第 1 步和第 2 步完成任何作业时触发。然后,中间作业将从模板创建临时作业。

或者,您可以在 jenkins 内部或外部创建某种处理程序,这些处理程序将 运行 关闭某些属性文件或数据库,其中包含何时需要启动作业的调度。当然,如果您要走编写处理程序的路线,您可能会考虑付出一些额外的努力并编写一个 jenkins 插件...