【问题标题】:Is it possible to pause a stage until a time is reached in a Jenkins declarative pipeline?是否可以暂停一个阶段,直到在 Jenkins 声明性管道中达到某个时间?
【发布时间】:2019-01-15 22:52:44
【问题描述】:

我的要求是只允许在特定时间范围内部署到生产环境,例如:04:00 到 06:00 之间。

我的 Jenkins 管道由 Git webhook 触发,并启动一个由通常阶段(构建、测试、部署开发、部署预、部署专业)组成的流程。

当我们到达 Deploy Pro 阶段时,我需要检查当前时间是否在允许范围内继续。否则我需要暂停管道(释放 Jenkins 代理),直到达到该时间范围。

有可能实现吗?怎么样?

【问题讨论】:

    标签: jenkins jenkins-pipeline


    【解决方案1】:

    为此,您可以使用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 之后。

    【讨论】:

      【解决方案2】:

      您的 Jenkins 管道由 Git webhook 触发,并启动由通常阶段(构建、测试、部署开发、部署预、部署专业)组成的流程。

      选项 1: 使用“何时”条件跳过部署,如果时间不在此之间

      选项 2:分离 CI 和 CD 的管道并且 CD 将仅在此期间触发或使用 shell cmd 保持在暂停阶段

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-21
        • 1970-01-01
        • 1970-01-01
        • 2017-12-05
        • 2018-04-28
        • 2021-08-02
        相关资源
        最近更新 更多