全部产品
Search
文档中心

云效:Java 应用测试构建并使用金丝雀发布策略发布至 ECS

更新时间:Apr 01, 2021

一、背景

如果你使用Java进行开发

  • 使用 Jar/War 的制品形式进行交付

  • 制品最终会运行在ECS或者自有主机上

  • 使用金丝雀策略进行发布

  • 那么本文档可以帮助您实现研发流程的协同自动化。

二、用户诉求

一般来说,用户使用主机部署场景如下:

  • 对源代码进行一定的质量检测,比如单元测试,代码扫描将源代码

  • 构建成为可交付的制品,比如 Jar/War将制品

  • 使用金丝雀策略发布至 ECS 虚拟主机

三、云效操作实践

接下来以一个 Java Spring Boot 的代码库为例,讲解如何进行构建并使用金丝雀策略到阿里云 ECS 服务器。

创建流水线

1. 进入云效 Flow(https://flow.alibabacloud.com/)。

2. 点击”创建流水线”。

image 1

3. 选择"Java · Test, build Image, deploy to ECS/VM in Canary Deploy"模板,并点击创建。

image c

配置代码库

1. 添加代码库,选择”通用Git“,输入示例代码库地址”https://github.com/yunxiao-devops/spring-boot-example.git”,默认分支输入”master“。由于示例代码库为公开代码库,可以随意输入个人证书。

image 2

配置构建上传任务

1. 修改一下”Java 构建上传“的任务,增加一个打包路径,填入 deploy.sh。这个文件存在于代码库中,其中包含了在 ECS 上进行应用启动的脚本,为了进行后续的主机部署,需要将这个文件也打入到压缩包中,在后续的主机部署任务中可以看到如何使用该deploy.sh。在该配置中指定了target/和deploy.sh两个路径,所以Flow会将这两个文件(夹)打包成为一个压缩包,并进行归档,在 Flow 中我们称之为制品,该制品也会在后续的主机部署任务中用到。

image 3

配置第一批主机组部署任务

1. 接下来配置主机部署任务,在制品下拉框中选择”制品名称.default”,也就是前面的”Java构建上传“步骤归档的那个制品。为了配置主机组,需要先创建一个,点击”新建主机组”。

image 4

2. 点击”新建服务授权”,跳转到阿里云,完成RAM授权,然后会自动跳回到Flow。此时再选择相应的地区,并选择需要部署的ECS,点击下一步,填写主机组名称,然后点击保存,完成主机组创建。新建的金丝雀主机组会自动填入到流水线配置中。

image 5image 6image 7

3. 接下来进行部署脚本的配置:

  • 下载路径:表示希望把”构建上传”任务中的压缩包下载到机器上的什么位置,在本例的值为:/home/admin/app/package.tgz

  • 执行用户:希望以是哪个用户的身份进行脚本执行,本例的值为:root

  • 部署脚本:在机器上执行脚本的具体内容,本例的值为:

mkdir -p /home/admin/application/
tar zxvf /home/admin/app/package.tgz -C /home/admin/application/
sh /home/admin/application/deploy.sh restart
image 8

4. 部署策略

配置暂停方式:希望一个主机组中的机器以什么样的暂停方式进行,比如第一批暂停,每批暂停,或者不暂停。推荐使用第一批暂停,在发布完第一批之后,对线上服务进行观察,如果没有异常,则可以继续其余批的发布

分批数量:希望主机组中的机器分为几批进行发布。比如一共4台机器,分两批,则每批同时发布2台机器。

配置人工卡点验证任务

1. 点击人工卡点任务,选择验证人。

image 9

配置第二批主机组部署任务

1. 同第一批主机组部署任务,配置第二批主机组部署任务,选择生产主机组进行发布。

image 10

运行流水线

1. 配置完毕,点击”保存并运行”触发流水线:

image 11image 12

2. 然后,就可以查看流水线的云效详情,包括代码扫描测试结果、构建日志、部署日志信息。

image 13

3. 金丝雀主机组发布完毕后,流水线处于等待人工审核阶段,可以对业务进行验证。选择通过验证,会对第二批实际生产主机组进行发布。

image 14

4. 如果人工验证不通过,你可通过发布历史,选择您需要回滚的具体版本,Flow 将会自动帮你回滚到该版本。

12123