如何自动化AWS中Jenkins Slave实例的打补丁过程

47次阅读
没有评论

问题描述

正在为AWS中的一些基础设施开发自动化的打补丁解决方案。其中一个AWS账户托管了他们用于CI/CD操作的Jenkins实例。他们的实例是在AWS EC2实例上运行的,并且是持久性的,即它们的生命周期足够长,如果不打补丁,就会不符合合规要求。用户过去手动打过Jenkins slaves的补丁,工作流程大致如下:
1. 登录到Jenkins实例。
2. 确保目标节点上没有正在运行的作业。
3. 将目标节点标记为离线。
4. 打补丁目标节点。
5. 再次登录到Jenkins实例。
6. 将节点标记为在线。
这个过程涉及与Jenkins实例本身的交互。由于用户希望这个解决方案是自动化的,他们不想在打补丁之前和之后手动登录和执行这个过程。目前,用户可以从目标节点本地执行任意的bash代码,并且他们一直在寻找一种使用目标节点自身来标记其离线的方法,目前最好的方法似乎是使用Jenkins在运行作业时设置的环境变量来确定节点是否繁忙。
这将解决节点是否繁忙的问题,但我不知道如何在自动化打补丁的同时阻止它接受新的作业。我不想使用API调用,因为我认为这将要求我在所有Jenkins机器上放置凭据,而我不愿意这样做(管理凭据很麻烦)。另一种可能的方法是通过关闭节点的SSH来阻止Jenkins主节点分配给该节点更多的任务,但这听起来像一个糟糕的主意。
有人有任何关于如何使用本地bash执行在Jenkins slaves上标记离线和在线的想法吗?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

如果您使用Self-Organizing Swarm Plug-in将构建代理连接到主节点,您可以在不对主节点进行任何更改的情况下启动/停止代理。代理将自动向主节点注册。您需要为代理提供凭据以进行自注册。建议使用SSM参数存储来存储它们,然后在用户数据中检索它们。
您的代理可以完全是临时的,可以在用户数据中执行更新或通过更新AMI来执行更新。
以下是实施此解决方案的更详细示例:Terraform模块

方案2

使用Swarm插件而不是Kubernetes的原因是什么?该插件还显示了一个漏洞警告“通过Swarm客户端的UDP广播响应的XXE漏洞”。该插件与Docker swarm无关,它可以使用普通的EC2实例而不是Docker。AWS不支持广播,我想知道在AWS中是否不容易受到漏洞的影响。
方案1中提到的Self-Organizing Swarm Plug-in是一种将构建代理连接到Jenkins主节点的插件。它可以使代理自动注册并且可以在不对主节点进行更改的情况下启动/停止代理。这种方法可以使代理完全临时,您可以在用户数据中执行更新或通过更新AMI来执行更新。这个插件可以使用普通的EC2实例而不是Docker,因此与Kubernetes无关。关于漏洞警告的问题,如果您使用的是AWS,那么由于AWS不支持广播,所以不容易受到该漏洞的影响。
请注意,以上解决方案是根据问答数据和我的知识库生成的,如果您有其他需求或问题,请随时提问。

正文完