jenkins - 如果配置代理花费的时间太长,是否可以配置 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 功能或插件可以做这样的事情?
解决方案
最后,我在 Jenkins 中找不到任何我想要的东西——尽管 Jenkins EC2 插件似乎确实有一张票可以支持这个缺失的功能。
我用 lambda 解决了 AWS 中的问题。每当 Jenkins 销毁实例时,都会触发 lambda,然后 lambda 会从该事件中计算出实例的存活时间。如果它不够长(小于节点通常等待的空闲时间),那么 Jenkins 必须挂起并且 lambda 会终止工作。
推荐阅读
- google-sheets - ARRAYFORMULA 中仅针对过去日期的分组平均值
- android - 如何在屏幕底部添加取消问题
- javascript - Rails 5:用阅读更多和隐藏链接截断一些
- swift - MFMailComposerViewController 没有得到 didFinishWithResult
- node.js - 当谷歌使用 http.get 方法从前端登录时,在 Angular 中获取 CORS 策略错误
- c# - 使用 XPath 查找没有标签的元素
- sql - Postgres:基于布尔值选择列名
- sql - SQL 复杂条件聚合
- machine-learning - 如何在机器学习工具包上为历史数据设置警报
- deployment - 在学习章鱼部署方面遥遥领先