首页 > 其他 > 详细

运用京东云代码托管、云编译、云部署等产品进行蓝绿部署简单实践

时间:2019-05-06 19:11:03      阅读:195      评论:0      收藏:0      [点我收藏+]

干货 | 运用京东云代码托管、云编译、云部署等产品进行蓝绿部署简单实践

技术分享图片


前几天我们以一种较为传统的方式在京东云上简单实践了基于Jenkins+Docker+Git?的CI流程,主要利用一些开源技术来实现,今天我们运用在京东云的3款开发者工具来简单实践下蓝绿部署。


一、操作说明

1.产品与概念了解

代码托管:
基于Git的代码托管工具,用户可将代码托管到京东云中。产品包含代码提交、存储、下载、分支管理与对比、合并、历史等功能,为京东云持续交付全流程提供源代码托管服务。

云编译:
云编译服务为开发者提供基于容器的自动化持续集成服务。支持多语言构建环境,构建产出支持包/镜像,查看构建结果及日志。编译构建实现容器化隔离,支持自定义构建容器,为产品的持续集成提供上游基础服务,提升研发效率。

云部署:
云部署是集多种部署类型、部署方式于一身的强大部署工具。使用云部署,您可以轻松的将程序包部署到京东云主机中。同时,支持多种部署策略与部署配置,灵活可调配。与负载均衡、高可用组等产品相联动,实现云端部署。

京东云云部署-蓝绿部署:
蓝绿部署,是一种先对部署组中未承接流量的分组(蓝组或绿组)内的云主机进行新版本部署,再通过切换路由的方式实现版本更替的部署方式。
具体来说:

技术分享图片

1)在上线前,仅蓝组或绿组中的一组(比如蓝组),通过负载均衡,承接流量,对外提供服务。
2)开始部署,对未承接流量的组(比如绿组)进行新版本的部署。此时,蓝组仍然继续提供服务。
3)当绿组部署完毕,将绿组主机注册到指定负载均衡后端服务所关联的虚拟服务器组列表中,此虚拟服务器组为自动新建。
与此同时,将蓝组所在的负载均衡虚拟服务器组删除。蓝组不再提供服务,绿组提供服务。

详细介绍请参考:

https://docs.jdcloud.com/cn/codedeploy/deployment-type

2.文档操作说明

下面以将代码托管中的源代码,经过云编译,生成程序包,然后使用云部署产品蓝绿部署到云主机中为例,列举出基本服务,以帮助快速入门。

基本操作流程如下:

1)将提供的示例代码下载到本地进行编辑后上传到京东云代码托管仓库;

2)在云编译中,对代码托管的示例源代码进行编译构建,生成程序包;

2)然后使用云部署,将程序包部署到云主机中;

3)使用负载均衡的公网IP加端口,可访问示例代码

文档操作示例图

技术分享图片

二、准备工作

1.新建云主机

在地域:华北-北京,新建2台云主机,具体信息如下:

创建方式:自定义创建
镜像:官方?CentOS?CentOS?7.4?64位
规格:通用型?2c4g
存储:默认选项
网络:选择已有的私有网络及子网、选择默认安全组开发全部端口
基本信息:填写主机名、密码。这里填写主机名为:devops-ecs-hcc01/02

技术分享图片

更改主机名:
主机①


1[root@113?~]#?hostnamectl?set-hostname?devops-ecs-hcc01
2[root@113?~]#?hostname?devops-ecs-hcc01
3[root@113?~]#?logout
4[root@devops-ecs-hcc01?~]#?

主机②


1[root@112?~]#?hostnamectl?set-hostname?devops-ecs-hcc02
2[root@112?~]#?hostname?devops-ecs-hcc02
3[root@112?~]#?logout
4[root@devops-ecs-hcc02?~]#?

安装Agent:

其他地域云主机安装方法参考:https://docs.jdcloud.com/cn/devops/install-agent


1#华北-北京????
2wget?-c?http://devops-hb.s3.cn-north-1.jcloudcs.com/ifrit/ifrit-agent-external-v0.01.448.0742c84.20190327191802.bin?-O?installer?&&?sh?installer?--?-a?zero-agent,hawkeye-agent,log-agent,ark-query?/usr/local/share/jcloud/ifrit?&&?rm?-f?installer

执行结果如下:

技术分享图片

2.新建负载均衡实例及监听器

在地域:华北-北京,新建负载均衡实例,具体信息如下:

地域:华北-北京?
可用区:可用区A?
私有网络:请选择与云主机一致的私有网络?
带宽:1Mbps
名称:devops-slb-hcc

接下来,在此负载均衡实例中,新建监听器,点击“添加监听”,进入到新建监听器页面。

技术分享图片

技术分享图片

具体信息如下:

监听协议[端口]:Http?80
空闲链接超时:60
默认后端服务:新建后端服务
后端服务名称:devops-slb-backend-hcc
端口:9011
调度算法:加权轮询
健康检查方式:HTTP

3.上传示例代码至代码托管

如下操作是将此示例代码放到代码托管产品中,代码示例地址为:https://code.jdcloud.com/devops-demo/java-demo.git

新建私有项目

第一步:创建项目,代码托管地址:https://code.jdcloud.com/

技术分享图片

输入项目名称,点击Create project

技术分享图片

技术分享图片

创建完成后,我们能看到一些命令行介绍提示

技术分享图片

配置SSH密钥

创建项目完成后,我们从提示可以看到提供两种pull或push方式,分别为SSH和HTTPS,我这里选择用SSH

技术分享图片

第一步:任选一台咱们刚开始创建的云主机,在云主机上进行SSH密钥生成


 1[root@devops-ecs-hcc01?~]#?yum?install?git?-y
 2[root@devops-ecs-hcc01?~]#?git?config?--global?user.name?"hanchaochao"
 3[root@devops-ecs-hcc01?~]#?git?config?--global?user.email?"hanchaochao5@jd.com"
 4[root@devops-ecs-hcc01?~]#?ssh-keygen?-t?rsa?-C?"hanchaochao5@jd.com"
 5Generating?public/private?rsa?key?pair.
 6Enter?file?in?which?to?save?the?key?(/root/.ssh/id_rsa):?
 7Enter?passphrase?(empty?for?no?passphrase):?
 8Enter?same?passphrase?again:?
 9Your?identification?has?been?saved?in?/root/.ssh/id_rsa.
10Your?public?key?has?been?saved?in?/root/.ssh/id_rsa.pub.
11The?key?fingerprint?is:
12SHA256:z0TcCqkyplsxENQK/KJKSIK4NXJJzn9TnuhJpeZOuaQ?hanchaochao5@jd.com
13The?key‘s?randomart?image?is:
14+---[RSA?2048]----+
15|..o.?????????????|
16|.....????o?.?????|
17|o=oo????o?o?.????|
18|=oOo???.oo?.?????|
19|==.o*?.*S.o??????|
20|+.?o.=B.o+???????|
21|o?.?.*+o??o??????|
22|.??o?++.?????????|
23|??.?E.o??????????|
24+----[SHA256]-----+
25[root@devops-ecs-hcc01?~]#?cat?.ssh/id_rsa.pub
26ssh-rsa?AAAAB3NzaC1yc2EAAAADAQABAAABAQDFv6mC/EHXCIHTcwcn5DwSEGiy4m+x5hTmlrRZUfEmQWn8slyMWktyHOmXvKMI9I4Gr0WZuR+Yekq7vawF8kBAPhM1G97TuHmLRI......
27[root@devops-ecs-hcc01?~]#?

技术分享图片

第二步:

登录代码托管平台:https://code.jdcloud.com/,将生成的密钥公钥添加到代码托管里

技术分享图片

技术分享图片

技术分享图片

示例代码下载

真实情况如果您已经有现成代码,则跳过这一步直接按照代码上传步骤上传即可。

在上一步骤新建的云主机中进行如下操作


 1[root@devops-ecs-hcc01?~]#?mkdir?test
 2[root@devops-ecs-hcc01?~]#?cd?test/
 3[root@devops-ecs-hcc01?test]#?git?init
 4Initialized?empty?Git?repository?in?/root/test/.git/
 5[root@devops-ecs-hcc01?test]#?git?clone?https://code.jdcloud.com/devops-demo/java-demo.git
 6Cloning?into?‘java-demo‘...
 7remote:?Enumerating?objects:?216,?done.
 8remote:?Counting?objects:?100%?(216/216),?done.
 9remote:?Compressing?objects:?100%?(171/171),?done.
10remote:?Total?216?(delta?39),?reused?176?(delta?21)
11Receiving?objects:?100%?(216/216),?1.02?MiB?|?0?bytes/s,?done.
12Resolving?deltas:?100%?(39/39),?done.
13[root@devops-ecs-hcc01?test]#?ll
14total?0
15drwxr-xr-x?5?root?root?126?Apr??9?15:34?java-demo
16[root@devops-ecs-hcc01?test]#?

技术分享图片

更改代码分支

执行如下命令,我们发现有两个分支,分别为devops-demo和master,而我们现在在devops-demo分支上,为方便后续蓝绿部署操作更直观,我们将此分支重命名为blue,并复制这个分支为green


 1[root@devops-ecs-hcc01?java-demo]#?git?branch
 2*?devops-demo
 3??master
 4[root@devops-ecs-hcc01?java-demo]#?git?branch?-m?blue
 5[root@devops-ecs-hcc01?java-demo]#?git?branch
 6*?blue
 7??master
 8[root@devops-ecs-hcc01?java-demo]#?git?branch?green
 9[root@devops-ecs-hcc01?java-demo]#?git?branch
10*?blue
11??green
12??master
13[root@devops-ecs-hcc01?java-demo]#?

技术分享图片

示例代码上传

将下载到云主机的示例代码上传到我们自己的代码托管项目里


 1[root@devops-ecs-hcc01?test]#?cd?java-demo/
 2[root@devops-ecs-hcc01?java-demo]#?git?checkout?blue
 3Already?on?‘blue‘
 4[root@devops-ecs-hcc01?java-demo]#?git?remote?rm?origin
 5[root@devops-ecs-hcc01?java-demo]#?git?remote?add?origin?git@code.jdcloud.com:jdc-12/java-demo-hcc.git?????????
 6[root@devops-ecs-hcc01?java-demo]#?git?add?.
 7[root@devops-ecs-hcc01?java-demo]#?git?commit
 8#?On?branch?blue
 9nothing?to?commit,?working?directory?clean
10[root@devops-ecs-hcc01?java-demo]#?git?push?--all?-f
11Warning:?Permanently?added?the?ECDSA?host?key?for?IP?address?‘116.196.123.158‘?to?the?list?of?known?hosts.
12Counting?objects:?216,?done.
13Delta?compression?using?up?to?2?threads.
14Compressing?objects:?100%?(153/153),?done.
15Writing?objects:?100%?(216/216),?1.02?MiB?|?0?bytes/s,?done.
16Total?216?(delta?39),?reused?216?(delta?39)
17remote:?Resolving?deltas:?100%?(39/39),?done.
18remote:?
19remote:?To?create?a?merge?request?for?blue,?visit:
20remote:???https://code.jdcloud.com/jdc-12/java-demo-hcc/merge_requests/new?merge_request%5Bsource_branch%5D=blue
21remote:?
22remote:?To?create?a?merge?request?for?green,?visit:
23remote:???https://code.jdcloud.com/jdc-12/java-demo-hcc/merge_requests/new?merge_request%5Bsource_branch%5D=green
24remote:?
25To?git@code.jdcloud.com:jdc-12/java-demo-hcc.git
26?*?[new?branch]??????blue?->?blue
27?*?[new?branch]??????green?->?green
28?*?[new?branch]??????master?->?master
29[root@devops-ecs-hcc01?java-demo]#?

技术分享图片

回到代码托管控制台,我们发现我们的代码已经被上传到我们新建的项目中了,而且能看到两个分支,分别为bluegreen

技术分享图片

三、开始编译

为便于效果展示,我们将蓝绿部署的显示页面更改下,分别对应git上不同的分支:?
?更改地址:
/src/main/resources/web/index.html
更改内容:
blue:Blue-Hello?Devops!
green:Green-Hello?Devops!
?blue分支更改步骤如下:?

技术分享图片

技术分享图片

green分支更改步骤如上。

技术分享图片

在云编译中进行编译构建

在云编译中新建任务

技术分享图片

如前面提到的,我们需要将代码的两个分支(bluegreen)分别编译成不同的包,然后再进行发布,这样的话更直观。

蓝部署配置信息具体如下:

  • 任务名称:devops-ci-hcc-blue

  • 镜像来源:官方

  • 编译镜像:maven/maven3.6.0-jdk8

  • 代码源:京东云-代码托管

  • 仓库地址:请根据实际情况进行填写,例如jdc-12/java-demo-hcc(如果您代码托管操作正确,则在下拉框中便可看到)

  • 代码分支:蓝部署选择blue

  • 构建规范:插入构建命令

  • 构建命令:


 1---
 2#?设置环境变量
 3#envs:
 4#??-?name:?‘name1‘?环境变量的名
 5#????value:?‘value1‘?环境变量的值
 6#??-?name:?‘name2‘?用列表的方式设置多个值
 7#????value:?‘value2‘
 8
 9#?设置编译的命令
10#cmds:?
11#??-?name:?‘do?make‘??编译步骤名称
12#????cmd:?‘make‘??????编译命令,默认?PATH?路径下执行,其他请写明绝对路径
13#??-?name:?‘do?install‘
14#????cmd:?‘make?install‘
15cmds:
16??-?name:?‘chmod‘
17????cmd:?‘chmod?a+x?./build.sh‘
18??-?name:?‘demo‘
19????cmd:?‘./build.sh‘
20
21#?编译产物存储目录,?必填项
22out_dir:?‘output‘

  • 构建类型:应用包

  • 存储空间:选择你创建的对象存储Bucket

  • 存储目录:这个是选填项,我这里填了devops-hcc

  • 超时:2小时

  • 计算规格:4GB,4vCPU

  • 通知频率:不发送

技术分享图片

技术分享图片

点击保存并构建

技术分享图片

至此,已将蓝部署示例代码编译成功,并上传到对象存储,华北-北京空间中。

技术分享图片

在云编译中新建任务

技术分享图片

绿部署配置信息具体如下:

  • 任务名称:devops-ci-hcc-green

  • 镜像来源:官方

  • 编译镜像:maven/maven3.6.0-jdk8

  • 代码源:京东云-代码托管

  • 仓库地址:请根据实际情况进行填写,例如jdc-12/java-demo-hcc(如果您代码托管操作正确,则在下拉框中便可看到)

  • 代码分支:绿部署选择green

  • 构建规范:插入构建命令

  • 构建命令:


 1---
 2#?设置环境变量
 3#envs:
 4#??-?name:?‘name1‘?环境变量的名
 5#????value:?‘value1‘?环境变量的值
 6#??-?name:?‘name2‘?用列表的方式设置多个值
 7#????value:?‘value2‘
 8
 9#?设置编译的命令
10#cmds:?
11#??-?name:?‘do?make‘??编译步骤名称
12#????cmd:?‘make‘??????编译命令,默认?PATH?路径下执行,其他请写明绝对路径
13#??-?name:?‘do?install‘
14#????cmd:?‘make?install‘
15cmds:
16??-?name:?‘chmod‘
17????cmd:?‘chmod?a+x?./build.sh‘
18??-?name:?‘demo‘
19????cmd:?‘./build.sh‘
20
21#?编译产物存储目录,?必填项
22out_dir:?‘output‘

  • 构建类型:应用包

  • 存储空间:选择你创建的对象存储Bucket

  • 存储目录:这个是选填项,我这里填了devops-hcc

  • 超时:2小时

  • 计算规格:4GB,4vCPU

  • 通知频率:不发送

技术分享图片

技术分享图片

点击保存并构建

技术分享图片

至此,已将蓝绿部署示例代码编译成功,并分别对应代码的blue分支和green分支,在华北-北京对象存储中可查看蓝部署和绿部署对应的编译产出物。

技术分享图片

接下来,将开始使用云部署将程序包部署到云主机上。

四、开始部署

1.新建应用及部署组

在“部署应用”页,选中与云主机、对象存储相同的地域后,点击“新建应用”

技术分享图片

跳转到“新建应用”页。

在“新建应用”页,首先填写应用信息。应用名称:devops-app-hcc

技术分享图片

点击"新建"按钮

接下来,在应用中新建部署组,

技术分享图片

有以下选项:

部署组名称:请填写部署组名称,devops-group-hcc

部署类型:请选择“蓝绿部署”

部署目标:点击“选择”按钮,在弹窗中选择云主机。支持三种选择过滤条件:高可用组(目前灰度开放)、标签、IP。这里请选择在上一步中创建的云主机,即主机名为:devops-ecs-hcc01加入蓝组,主机名为:devops-ecs-hcc02加绿组

使用负载均衡:是

负载均衡实例:请选择华北-北京地域中已有的负载均衡实例,devops-slb-hcc

负载均衡后端服务:请选择上一项中指定的负载均衡实例下的后端服务,devops-slb-backend-hcc

高级选项:保持默认选项

技术分享图片

填写部署组的基本信息后,请点击“新建”,将进行应用中部署组的新建。

创建成功后,将跳转到“应用详情”页。

技术分享图片

Alt text

2.新建部署

对于单个部署组,可支持的操作有:发起部署、部署历史、编辑、删除。

点击“发起部署”按钮,进入到“发起部署任务”页,有以下选项:

  • 部署描述:非必须,为本次部署的描述信息

  • 部署来源:支持多种部署来源,请选择云编译

  • 云编译任务名称:请填写devops-ci-hcc-blue

  • 云编译构建序号:请填写上一步中编译成功的构建序号

  • 部署来源文件类型:请选择.tar.gz

  • 操作命令:请选择输入部署操作命令,使用表单功能,填写具体操作命令,如下:

部署内容:?源目录或文件:/????目标目录:/home
停止脚本:/home/bin/stop.sh
启动脚本:/home/bin/start.sh
检查脚本:不填写
脚本执行账号:??root???? ??
脚本超时时间(s):100

注意:
1、初次部署不要填写停止脚本路径;
2、初次执行部署的部署目标为蓝组,也就是devops-ecs-hcc01

技术分享图片

技术分享图片

填写部署任务信息后,请点击发起部署,将触发部署操作。

将跳转到“部署详情”页,由于我们是初次部署,所以部署目标为蓝组

技术分享图片

部署完成后,我们到负载均衡虚拟服务器组里能看到蓝组的devops-ecs-hcc01云主机已经关联

技术分享图片

3.查看部署结果

在“部署任务详情”页,可见本次部署的进展情况。在部署过程中,支持“取消”。

点击指定实例的“查看日志”,可见按照工作流展示的日志,工作流详见:

https://docs.jdcloud.com/cn/codedeploy/workflow。

技术分享图片

验证蓝组部署结果?http://负载均衡公网IP

技术分享图片

接下来部署绿组,我们找到初次部署的部署历史,点击重新部署,配置如下:

  • 部署描述:非必须,为本次部署的描述信息

  • 部署来源:支持多种部署来源,请选择云编译

  • 云编译任务名称:请填写devops-ci-hcc-green

  • 云编译构建序号:请填写上一步中编译成功的构建序号

  • 部署来源文件类型:请选择.tar.gz

  • 操作命令:请选择输入部署操作命令,使用表单功能,填写具体操作命令,如下:

部署内容:?源目录或文件:/????目标目录:/home
停止脚本:/home/bin/stop.sh
启动脚本:/home/bin/start.sh
检查脚本:不填写
脚本执行账号:??root? ? ??
脚本超时时间(s):100

注意:
1、此次执行部署的部署目标为绿组,也就是devops-ecs-hcc02

devops-ecs-hcc02(绿组)部署成功

技术分享图片

部署绿组后,我们到负载均衡虚拟服务器组里能看到蓝组的devops-ecs-hcc01云主机已经换成了绿组的devops-ecs-hcc02云主机

技术分享图片

验证绿组部署结果?http://负载均衡公网IP

技术分享图片

至此,京东云代码托管+云编译+云部署蓝绿部署简单实践完成。

技术分享图片

*点击“阅读原文”跟着文档一起操作吧~

技术分享图片

阅读原文

运用京东云代码托管、云编译、云部署等产品进行蓝绿部署简单实践

原文:https://www.cnblogs.com/jdclouddeveloper/p/10821385.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!