在AWS上实施具有高可用性的Jenkins指南

258 阅读2分钟

在我们目前的项目中,我们使用管理服务作为我们主要的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卷。

使用其他默认选项并创建一个卷。

用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仪表板并尝试访问它。