在我们目前的项目中,我们使用管理服务作为我们主要的CICD解决方案。在过去的几个月里,我们的管理服务提供商的服务器发生了几次故障,影响了我们客户的业务。因此,我们决定转而采用自我管理的CICD解决方案。对于我们来说,Jenkins是实现这一方案的最佳工具。
要求
- 高可用性
- 可扩展性
- 安全性
- 成本效益高
高可用性
为了使我们的基础设施具有高可用性,我们决定将我们的主服务器部署在两个不同AZ的自动扩展组中。因此,即使我们部署在一个AZ中的单个主服务器由于AZ的中断而宕机。
它将会在另一个AZ中重新生成。这将使我们的服务器高度可用,但有一个问题,即在发生扩展事件时,我们如何保留Jenkins主服务器的配置?
要保留已安装的插件、作业和其他Jenkins的配置。我们决定在AWS EFS上挂载Jenkins主目录,其生命周期策略是保留15天的备份,间隔12小时的备份计划。
可扩展性
为了扩展我们的Jenkins从属实例,我们使用了Jenkins中的**AWS EC2插件**。因此,我们可以随着作业队列规模的增长来扩展我们的工人节点。
安全性
为了提供更安全的连接,我们在AWS上实施了一个免费的openVPN服务器,以便在AWS私人网络中访问我们的jenkins dashboad。
成本效益
我们使用了现货实例,其最高现货价格为其当前的需求价格。这将让你在利用资源的同时减少被AWS回收的机会。
设置指南
为你的Jenkins Master创建一个AMI
- 在2个可用区创建EFS卷。


使用其他默认选项并创建一个卷。
- 用ubuntu 20 ami启动一个实例。
- 在创建的实例上使用以下链接安装Jenkins和其他实用程序。
- www.digitalocean.com/community/t…(确保你之前已经安装了java)
- 安装aws cli和nfs utility
用Jenkins Master AMI创建一个启动配置或启动模板。
- 使用下面的用户数据和早期创建的Jenkins Master AMI进行启动配置。
#cloud-config
runcmd:
- echo "<your efs file-system-id>.efs.<your aws region>.amazonaws.com:/ /var/lib/jenkins nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 0 0" >> /etc/fstab
- mount -a -t nfs4
- chown jenkins:jenkins /var/lib/jenkins/


用上述启动配置或模板创建一个自动扩展组。


一旦自动扩展组成功启动你的Jenkins主实例。你可以使用ALB将你的请求重定向到你的Jenkins仪表板并尝试访问它。

