【发布时间】:2019-01-15 22:52:44
【问题描述】:
我的要求是只允许在特定时间范围内部署到生产环境,例如:04:00 到 06:00 之间。
我的 Jenkins 管道由 Git webhook 触发,并启动一个由通常阶段(构建、测试、部署开发、部署预、部署专业)组成的流程。
当我们到达 Deploy Pro 阶段时,我需要检查当前时间是否在允许范围内继续。否则我需要暂停管道(释放 Jenkins 代理),直到达到该时间范围。
有可能实现吗?怎么样?
【问题讨论】:
我的要求是只允许在特定时间范围内部署到生产环境,例如:04:00 到 06:00 之间。
我的 Jenkins 管道由 Git webhook 触发,并启动一个由通常阶段(构建、测试、部署开发、部署预、部署专业)组成的流程。
当我们到达 Deploy Pro 阶段时,我需要检查当前时间是否在允许范围内继续。否则我需要暂停管道(释放 Jenkins 代理),直到达到该时间范围。
有可能实现吗?怎么样?
【问题讨论】:
为此,您可以使用sleep 方法,该方法可以获得不同的单位:NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS(默认为SECONDS)。
例如sleep(time:3,unit:"SECONDS")(或只是 sleep 3 - 相同)。
所以,检查当前时间是否在允许范围内,如果不在允许范围内,则将 sleep 方法的时间指定为 04:00 - <current time> 的值(您需要在这里使用一些算术来获得以秒为单位的正确值或分钟,但应该不难)。
但是如果所有其他阶段都非常快,我建议您对所有管道使用Poll SCM 选项(指定时间范围),因为它更容易并且结果将是相同的 - 工作只会完成04:00 之后。
【讨论】:
您的 Jenkins 管道由 Git webhook 触发,并启动由通常阶段(构建、测试、部署开发、部署预、部署专业)组成的流程。
选项 1: 使用“何时”条件跳过部署,如果时间不在此之间
选项 2:分离 CI 和 CD 的管道并且 CD 将仅在此期间触发或使用 shell cmd 保持在暂停阶段
【讨论】: