AWS DevOps – 配合 Jenkins 和 CodeDeploy 实现代码自动化部署

阅读数:86 2019 年 10 月 31 日 08:00

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

作为 DevOps 和微服务的深入践行者,Amazon 在内部积累了许多持续集成、交付和部署的自动化工具和平台。本文主要介绍如何在 AWS 云上,使用 CodeDeploy,并配合 Jenkins 来构建持续集成 / 持续交付的管道,自动化代码部署和版本迭代。

在查看本文之前,建议大家先阅读一下代闻老师写的关于 CodeDeploy 的文章。

https://aws.amazon.com/cn/blogs/china/getting-started-with-codedeploy/

一、创建 EC2 实例并安装 CodeDeploy Agent

创建 Amazon EC2 实例,选择实例类型和添加存储。

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

在“高级详细信息”里面输入启动脚本

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

#!/bin/bash
yum -y update
yum install -y ruby
yum install -y aws-cli
cd /home/ec2-user
aws s3 cp s3://aws-codedeploy-cn-north-1/latest/install . --region cn-north-1
chmod +x ./install
./install auto
EC2 启动成功后,使用 SSH 到该 EC2,使用如下命令检验 Agent 是否工作正常。

sudo service codedeploy-agent status

Result: The AWS CodeDeploy agent is running as PID 3523

二、创建应用程序负载均衡(ALB)

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

创建 Target Group

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

三、创建 CodeDeploy 环境

点击“创建应用程序”

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

输入应用程序名称,和部署组的名称。CodeDeoploy 支持两种部署方式,“就地部署”和“蓝绿部署”,更多关于部署类型请参考:

https://docs.aws.amazon.com/zh_cn/codedeploy/latest/userguide/applications-create-in-place.html

环境配置可以选择 Auto Scaling 组、Amazon EC2 实例,或者本地实例。

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

该文档使用的是 Amazon EC2 实例方式,通过 Tag 指标相对应的 EC2 实例。

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

启用负载均衡,选择之前创建的 Target Group。

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

配置回滚的策略,比如选择“部署失败时回滚”。可以根据情况添加触发器,并订阅 Amazon SNS 进消息通知,也可以配置 CloudWatch 警报,当指标超过或者低于 CloudWatch 中设定的阈值就可以自动触发或者停止部署。

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

CodeDeploy 环境创建成功

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

四、使用 Github 托管源代码,并配置 webhook 自动触发

首先进入自己的 Github 地址,点击 https://github.com/settings/tokens,生成 GitHub token,这个 token 用于 jenkins 访问 GitHub。

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

为需要做 CI/CD 的 GitHub 创建 hook,实现代码更新自动通知 Jenkins,Payload URL 设置 Jenkins Server 的地址,默认 Jenkins 监听 8080 端口。记录下生成的 token 字符串,比如: bf6adc27311a39ad0b5c9a63xxxxxxxxxxxxxx

创建一个新的 repository

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

创建本次环境所需要的 Git 仓库,比如名为 AWS-BJS-CodeDeploy-CICD-Jenkins。点击“Settings”配置 webhooks。

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

点击“Add Webhooks”

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

在 Payload URL,输入 http://EC2 公网 IP 地址 /github-wekhook/,如下图所示:

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

五、部署 Jenkins,并安装 CodeDeploy 插件

安装如何脚本安装 Jenkins,默认 Java 的环境是 1.7 的,可以先升级到 Java 1.8 版本。

sudo -s

java –version

yum install java-1.8.0

yum remove java-1.7.0-openjdk

wget -O /etc/yum.repos.d/jenkins.repo http://jenkins-ci.org/redhat/jenkins.repo

rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key

yum install jenkins

chkconfig jenkins on

service jenkins start

// 查看 Jenkins 默认密码

cat /var/lib/jenkins/secrets/initialAdminPassword

在浏览器输入输入 EC2 的公网 IP 地址(最好绑定一个弹性 EIP),比如 54.223.215.xx:8080,然后出现如下界面,输入上面得到的默认密码。

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

创建用户名和密码,就到如下界面,这个时候 Jenkins 就可以进行配置了。

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

进入系统配置

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

输入 Jenkins URL,点击“Add”添加 Jenkins

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

输入 Github 获取的 Access Token,点击“添加”。

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

点击“Test Connection”,没有报错说明配置成功。

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

添加管理插件

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

添加 AWS CodeDeploy 的插件,点击“Install without restart”

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

新建一 Jenkins 个项目,点击“Create a new project”

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

配置 Github 项目的地址,源代码管理选择 Git 方式。

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

触发构建,选择 Github hook trigger for GITScm polling

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

选择“Post-build Actions”,输入 CodeDeploy 相关信息,区域选择 AWS 中国(北京)区域 cn-north-1

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

认证方式可以输入 AWS Access Key 和 Security Key,如果是生产环境建议使用临时的 credentials。

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

创建完成之后可以看到如下界面

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

六、测试

测试 PHP 代码下载地址

https://github.com/TerrificMao/AWS-BJS-CodeDeploy-CICD-Jenkins

当代码部署成功时,输入 EC2 公网 IP 地址,可以看到如下界面,此时为 V1 版本。

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

此时,开发工程师在本地修改代码

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

Github 本地客户端会自动识别到代码变更,输入描述内容以及关键词,点击“commit to master”,再点击右上方的“Sync”,代码就会自动推送到 Github 中。

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

可以看到当代码提交到 Github 之后,Jenkins 自动触发,拉取代码,进行构建。

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

看到构建成功,自动打包,并把打完的 Zip 包自动上传到指定的 S3 存储桶上。

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

打开 CodeDeploy 界面,发现自动触发了一次代码部署。

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

部署正在进行中

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

可以看到部署成功了,如果失败就回滚。

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

点击详情可以看到 CodeDeploy 自动部署的过程。

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

刷新浏览器,发现代码自动化部署成功,替换成了 V2 版本。

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

由于前面我们部署了负载均衡 ALB,可以复制 ALB 的 DNS 名称到浏览器

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

发现用负载均衡 ALB 访问也是成功的。

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

上一台 EC2 在可用区 b,刷新负载均衡器,会将流量自动分发到另一台机器上,此时在可用区 a 了。

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

到此,一个比较简单的由 ALB(负载均衡) + EC2(服务器) + Auto Scaling(自动扩展)组成架构,使用 AWS CodeDeploy,再配合 Jenkins 可以实现代码的自动化部署和版本迭代。

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

当然,AWS 在 DevOps 方面提供的能力远远不止于此,AWS 在开发、构建、测试、部署、搭建、监控、运维等各个维度都提供了托管的服务,可以让用户轻松完成持续部署、持续集成方面的自动化。

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

最后,如果您想了解容器和 Lambda 方面的自动化部署方案,可以参考:

(1)基于 Amazon EC2 Container Service 的持续集成 / 持续交付解决方案

https://aws.amazon.com/cn/blogs/china/continuous-integrationcontinuous-delivery-solution-based-on-aws-ecs/

(2)如何使用 AWS CodePipeline,AWS CodeBuild 与 AWS CloudFormation 实现 Amazon ECS 上的持续集成持续部署解决方案:

https://aws.amazon.com/cn/blogs/china/how-to-implement-the-continuous-integrated-continuous-deployment-solution-on-amazon-ecs-using-aws-codepipelineaws-codebuild-and-aws-cloudformation/

(3)AWS Lambda 配合 Jenkins 实现自动化持续部署

https://aws.amazon.com/cn/blogs/china/aws-lambda-jenkins-automatically-deployment/

作者介绍

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

毛郸榕,AWS 解决方案架构师。负责基于 AWS 的云计算方案的架构设计,同时致力于 AWS 云服务在国内和全球的应用和推广,毕业于北京航空航天大学云计算专业,硕士,毕业后直接加入 AWS 中国。在大规模并发后台架构、物联网、DevOps 以及 Serverless 无服务器架构等领域有着广泛的设计与实践经验。

本文转载自 AWS 技术博客。

原文链接:
https://amazonaws-china.com/cn/blogs/china/aws-devops-jenkins-and-codedeploy/

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

评论

发布