首页 > 解决方案 > 如果配置代理花费的时间太长,是否可以配置 Jenkins 以使工作失败?

问题描述

我正在使用Jenkins AWS EC2 插件,它生成 EC2 节点来执行 Jenkins 作业。在某些情况下,此插件可能会在等待配置节点时无限期挂起。例如,如果一个项目需要 python,但 EC2 映像没有 python,Jenkins 将启动一个节点,无法运行作业,启动另一个节点,无法运行作业,启动另一个节点......

与此同时,工作永远挂起,詹金斯支付了亚马逊账单,控制台输出如下所示:

[Pipeline] Start of Pipeline
[Pipeline] node
Still waiting to schedule task
‘Jenkins’ doesn’t have label ‘ec2worker’

通常,解决方案是首先正确配置 EC2 云,但说起来容易做起来难。很容易想象,例如,有人node.js在不更新 EC2 映像的情况下添加项目依赖项,然后 Jenkins 就开始参加比赛,试图为 AWS 高分...

理想情况下,我可以配置插件以在退出前限制提供尝试的次数,但没有此选项。有一个选项可以限制提供的节点总数,但由于每个节点在被认为不合适后都会被终止,Jenkins 只认为有一个活动节点。即,节点的数量在 0 和 1 之间波动,因为 Jenkins 创建了一个节点,丢弃它,然后创建另一个。

所以我正在寻找一种解决方法。有没有办法配置 Jenkins 在配置步骤中使构建失败?我可以限制创建节点所需的时间而不限制整个作业的总时间吗?

这种配置最好是系统范围的。但是如果它必须被推送到每个项目配置文件,我想它看起来像这样:

pipeline {
    agent {
        timeout(5m) {
            label 'ec2worker'
        }
    }
}

是否有 Jenkins 功能或插件可以做这样的事情?

标签: jenkinsjenkins-plugins

解决方案


最后,我在 Jenkins 中找不到任何我想要的东西——尽管 Jenkins EC2 插件似乎确实有一张票可以支持这个缺失的功能。

我用 lambda 解决了 AWS 中的问题。每当 Jenkins 销毁实例时,都会触发 lambda,然后 lambda 会从该事件中计算出实例的存活时间。如果它不够长(小于节点通常等待的空闲时间),那么 Jenkins 必须挂起并且 lambda 会终止工作。


推荐阅读