如何触发 Jenkins EC2-Plugin 的重新连接?

如何触发 Jenkins EC2-Plugin 的重新连接?

尝试解决上游 AMI 的最大开放限制较低的问题。

我可以填写限制文件,如果我手动断开/重新连接从属设备,则新的限制适用。

我还可以将 ulimit 更改放入 cloud-init,但 master 在 cloud-init 完成之前就连接了。

cloud-init 中唯一要做的就是写入一个 ulimit 文件。不确定如何让它“更快”。

用户数据:

#!/bin/sh

echo 'ec2-user hard nofile 65535' > /etc/security/limits.d/20-jenkins-maxfiles.conf

初始化脚本:

#!/bin/bash

echo Cloud-init status:
cloud-init status

echo Setting max-open soft to hard limit.
ulimit -S -n hard

echo Current limits:
ulimit -a

有没有办法在 ec2-plugin 的“Init 脚本”中触发断开连接/重新连接或延迟连接以允许 cloud-init 完成?

答案1

虽然这并不能解决 Jenkins 在部分运行初始脚本后重新连接的问题,但在这种情况下,不同的 cloud-init 脚本类型似乎可以解决该问题。

使用Cloud Boothookcloud-init 脚本类型将使其在 SSH 启动之前运行,并且可能在 systemd 启动的许多其他服务之前运行。

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/amazon-linux-ami-basics.html#supported-user-data-formats

https://cloudinit.readthedocs.io/en/latest/topics/format.html#cloud-boothook

Cloud Boothook

  • 以 #cloud-boothook 或 Content-Type: text/cloud-boothook 开头。

  • 这个内容就是boothook数据,存放在/var/lib/cloud下的一个文件中,然后立即执行。

  • 这是最早可用的“钩子”。没有提供仅运行一次的机制。boothook 必须自行处理此问题。它在环境变量 INSTANCE_ID 中提供实例 ID。使用此变量提供每个实例一次的 bootook 数据集。

相关内容