我正在使用Jenkins AWS EC2 plugin,它产生了EC2节点来执行Jenkins作业。在许多情况下,此插件可以在等待设置节点时无限期挂起。例如,如果一个项目需要python但EC2映像没有python,Jenkins将启动一个节点,无法运行该作业,启动另一个节点,无法运行该作业,启动另一个节点... < / p>
与此同时,工作永远挂起,詹金斯(Jenkins)积an了亚马逊账单,控制台输出看起来像这样:
[Pipeline] Start of Pipeline
[Pipeline] node
Still waiting to schedule task
‘Jenkins’ doesn’t have label ‘ec2worker’
通常,解决方案是首先只正确配置EC2云,但说起来容易做起来难。容易想象,例如有人在不更新EC2映像的情况下添加了node.js
作为项目依赖项,然后Jenkins参加了尝试获得AWS高分的竞赛...
理想情况下,我可以将插件配置为限制设置尝试的次数,然后再退出,但是对此没有选择。有一个选项可以限制已配置的节点总数,但是由于每个节点在认为不合适之后都会终止,因此Jenkins仅认为有一个活动节点。也就是说,随着詹金斯(Jenkins)创建一个节点,将其丢弃,然后再创建一个节点,节点的数量在0到1之间振荡。
所以我正在寻找解决方法。有没有一种方法可以配置Jenkins在预配步骤中使构建失败?我可以在不限制整个作业总时间的情况下限制创建节点所需的时间吗?
最好此配置是系统范围的。但是,如果必须将其推送到每个项目配置文件,我可以想象它看起来像这样:
pipeline {
agent {
timeout(5m) {
label 'ec2worker'
}
}
}
有没有类似Jenkins的功能或插件?
答案 0 :(得分:0)
最后,尽管Jenkins EC2插件似乎确实支持这种缺失的功能,但我在Jenkins中找不到能满足我要求的任何东西。
我用lambda解决了AWS中的问题。每当詹金斯(Jenkins)销毁实例时,都会触发该lambda,并从该事件中计算出该实例的生存时间。如果时间不够长(小于节点通常等待的空闲时间),则詹金斯必须挂起,而lambda会杀死工作。