在 Amazon EKS 上使用 Jenkins 和 HashiCorp Terraform 实现持续集成(一)

阅读数:1 2019 年 12 月 20 日 15:13

在 Amazon EKS 上使用 Jenkins 和 HashiCorp Terraform 实现持续集成(一)

这篇博客文章是 Amazon Web Services 与 HashiCorp 合作的成果。 HashiCorp AWS 合作伙伴网络 (APN) 的高级技术合作伙伴,在开发运营容器方面均具有 AWS 能力。

简介

有些客户在 Amazon Elastic Kubernetes Service ( Amazon EKS ) 上运行基于微服务的应用程序,他们需要使用 Jenkins 和 Spinnaker 构建完整的端到端持续集成 (CI) 和持续部署 / 交付 (CD) 管道方面的指导。 Jenkins 是非常流行的 CI 服务器,具有强大的社区支持和许多插件 (Slack、GitHub、Docker、Build Pipeline) 可用。 Spinnaker 提供自动发布和内置部署功能,并支持即开即用的蓝 / 绿部署。

这篇文章是在 Amazon EKS 上使用 Spinnaker 实现持续交付的姊妹篇,重点关注持续集成,并将讨论使用 Hashicorp Terraform Amazon EC2 上安装和配置 Jenkins。我们还将讨论 Spinnaker 管道的创建,此过程是实现强大的协调和分支的各个阶段的组合。这些管道可以手动启动,也可以由事件自动触发,例如 Docker 注册表中出现的新 Docker 映像。这篇文章中使用的其他服务和技术包括 Amazon EC2 AWS Cloud9 Docker Hub Amazon EKS

概念概述

Terraform

Terraform 是用于安全高效地构建、更改和版本控制基础设施的工具。它通过易于使用的命令行界面 (CLI) 以及免费使用的名为 Terraform Cloud 的 SaaS 产品和用于企业的专用设备进行控制。Terraform 可以管理现有和流行的服务提供商以及定制的内部解决方案。配置文件向 Terraform 描述了运行单个应用程序或整个数据中心所需的组件。Terraform 生成执行计划,以描述达到预期状态所需执行的操作,然后执行该计划以构建所描述的基础设施。配置更改时,Terraform 能够确定更改的内容并创建可以应用的增量执行计划。Terraform 的主要功能包括:基础设施即代码、执行计划、资源图和变更自动化。

Jenkins

Jenkins 是一个自包含的开源自动化服务器,可用于自动化与构建、测试以及交付或部署软件有关的各种任务。它可以通过本机系统软件包 Docker 安装,甚至可以由安装有 Java Runtime Environment (JRE) 的任何计算机独立运行。

先决条件

为了实现本文中的说明,您需要以下资源:

架构

本文中,我们将讨论下列适用于持续集成的架构:

在 Amazon EKS 上使用 Jenkins 和 HashiCorp Terraform 实现持续集成(一)

图 1. 持续集成架构

步骤概述:

  • 使用 Terraform 创建 Jenkins CI 服务器。
  • 配置 Jenkins。
  • 配置 Jenkins 作业和管道。
  • 创建和配置 Spinnaker 管道。
  • 手动运行 Spinnaker 管道。
  • 使用 AWS Cloud9 修改代码并推送代码更改。
  • 清理。

使用 Terraform 创建 Jenkins CI 服务器

手动预置 Jenkins CI 服务器可能容易出错且耗时,因此我将使用“基础设施即代码 (IaC)”方式配置 Jenkins Continuous Server (CI)。在本博文论述中我将使用 Terraform。登录到 AWS 管理控制台并创建一个 EC2 密钥对(在我的示例中,密钥对的名称为 ibuchh-key)。使用您的 GitHub 账户,派生 https://github.com/aws-samples/amazon-eks-jenkins-terraform.git 上的代码示例存储库

在 AWS Cloud9 IDE 中,打开一个 shell 终端并执行以下操作(用您的 GitHub 账户替换 aws-samples):

Bash

复制代码
git clone https://github.com/aws-samples/amazon-eks-jenkins-terraform.git
cd amazon-eks-jenkins-terraform/terraform/
terraform init
terraform plan
terraform apply -auto-approve

在 Amazon EKS 上使用 Jenkins 和 HashiCorp Terraform 实现持续集成(一)

图 2.Terraform apply 的输出

Terraform apply 还将输出 Jenkins CI 服务器的 IP 地址,如上所示。

Terraform 将预置一个 AWS EC2 实例,并如 install_jenkins.sh 文件所示安装 git、Apache Maven、Docker、Java 8 和 Jenkins:

Bash

复制代码
#!/bin/bash
sudo yum -y update
echo "Install Java JDK 8"
sudo yum remove -y java
sudo yum install -y java-1.8.0-openjdk
echo "Install Maven"
sudo yum install -y maven
echo "Install git"
sudo yum install -y git
echo "Install Docker engine"
sudo yum update -y
sudo yum install docker -y
sudo sudo chkconfig docker on
echo "Install Jenkins"
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum install -y jenkins
sudo usermod -a -G docker jenkins
sudo chkconfig jenkins on
echo "Start Docker & Jenkins services"
sudo service docker start
sudo service jenkins start

使用浏览器,打开页面 http://jenkins_ip_address:8080 ,这将显示 Jenkins 管理员页面:

在 Amazon EKS 上使用 Jenkins 和 HashiCorp Terraform 实现持续集成(一)

图 3.Jenkins 管理员页面

使用 AWS Cloud9 shell 终端,登录到 Jenkins CI 服务器,通过运行以下命令找到管理员密码:

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

将其粘贴到输入框中,从而在 Jenkins 控制台上输入管理员密码,然后单击下一步 ****。 单击安装建议的插件

本文转载自 AWS 技术博客。

原文链接: https://amazonaws-china.com/cn/blogs/china/continuous-integration-using-jenkins-and-hashicorp-terraform-on-amazon-eks/

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布