写点什么

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

2019 年 12 月 20 日

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

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


简介

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


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


概念概述

Terraform

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


Jenkins

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


先决条件

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



架构

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



图 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
复制代码



图 2.Terraform apply 的输出


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


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


Bash


#!/bin/bashsudo yum -y update
echo "Install Java JDK 8"sudo yum remove -y javasudo 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 -ysudo yum install docker -ysudo sudo chkconfig docker on
echo "Install Jenkins"sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.reposudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.keysudo yum install -y jenkinssudo usermod -a -G docker jenkinssudo chkconfig jenkins on
echo "Start Docker & Jenkins services"sudo service docker startsudo service jenkins start
复制代码


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



图 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/


2019 年 12 月 20 日 15:13399

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

评论

发布
暂无评论
发现更多内容

云图说 | 快速创建一个kubernetes集群

华为云开发者社区

Kubernetes 虚拟机 集群容错 华为云 容器化

抢占5G大市场 众盟科技助力企业跑赢短视频营销新赛道

人称T客

产品、方案、生态三力齐发 英特尔驱动智能边缘价值迸发

最新动态

作业二

Kiroro

week8

不在调上

架构师训练营 - 学习总结 第 8 周

铁血杰克

扎克伯格:从程序员到福布斯全球首富,他经历了什么?

北柯

总结

chenzt

Spring系列:请问各位大佬为何要学spring?

简爱W

架构师训练营第8周

大丁💸💵💴💶🚀🐟

架构师训练营第八周作业

sunnywhy

极客大学架构师训练营

第八周作业

方堃

如何在微服务团队中高效使用 Git 管理代码?

看山

git 微服务 高效

作业

不在调上

第八周·命题作业

刘璐

JVM详解之:汇编角度理解本地变量的生命周期

程序那些事

Java JVM 汇编 生命周期

域名凭什么能卖出亿元高价?

北柯

创业 互联网 域名解析

单向链表合并节点

chenzt

架构师训练营第八章总结

itrickzhang

面经手册 · 开篇《面试官都问我啥》

小傅哥

面试题 Java 面试 面试经验 面试官

敏捷开发:影响地图工作坊的反思

华为云开发者社区

敏捷开发 业务线 需求管理 需求 华为云

【API进阶之路】高考要考口语?我用多模态评测API做了一场10w+刷屏活动

华为云开发者社区

人工智能 学习 评测 API 华为云

作业一

Kiroro

架构训练营第八周感悟

张锐

Week 08 学习总结

Jeremy

面试官问:如何设计一个安全的对外接口?

Java小咖秀

Java 面试 经验

架构师训练营第八章作业

itrickzhang

英特尔®边缘软件中心重磅发布 一站式资源供给为应用开发创新赋能

最新动态

实现DevOps的三步工作法

看山

DevOps 凤凰项目

区块链+国防安全,科技是核心战斗力

CECBC区块链专委会

AI大有可为:NAIE平台助力垃圾分类

华为云开发者社区

AI 模型训练 垃圾回收机制 数据集 华为云

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

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