全部产品

Java 应用构建并部署 EDAS Kubernetes

一、背景

如果你

1.使用 Java 进行开发

2.使用容器镜像的制品形式进行交付

3.制品最终会运行在阿里云 EDAS Kubernetes 集群上

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

二、用户诉求

一般来说,使用 EDAS Kubernetes 部署场景如下:

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

2.将源代码构建成为可交付的制品,也就是容器镜像

3.对制品进行测试环境验证

4.使用完成验证的制品进行线上部署

上述活动需要有不同角色的参与:开发、测试、运维。如何保证不同参与者可以使用统一的交付流程来进行协作,是云效 Flow 交付流水线要解决的主要问题。

三、云效解决方案

通过云效持续交付流水线和阿里云 EDAS Kubernetes 很好的结合在一起,为应用的持续交付提供了很好的基础保障,如下图:

EDAS31

开发者提交代码变更到代码库,云效在监听着代码库的变动,一旦代码发生变化,将自动触发云效持续部署流水线一次构建任务的运行,包括代码检查、构建、测试部署、测试验证和生产部署等过程。其中,在构建完之后,生成 Docker 镜像,并自动上传至应用镜像仓库,在部署阶段(测试环境的部署和生产环境的部署)时,获取当前流水线实例构建出来的镜像版本,部署至 EDAS Kubernetes 集群。

四、云效操作实践

接下来以一个 Java Spring Boot 的代码库为例,讲解如何进行构建并部署至 EDAS Kubernetes 集群。

1、创建流水线

  • 进入云效(https://devops.aliyun.com)点击页面左上角的dock,选择流水线进入Flow

EDAS411
  • 点击右上角【新建流水线】,进入流水线创建向导页面。

EDAS412
  • 选择相应模板,并点击创建

EDAS413

2、配置代码库

创建流水线之后会自动弹出添加代码源的窗口,这里选择Flow提供的示例代码源,并进行添加

EDAS421

示例代码库地址为:https://code.aliyun.com/flow-example/spring-boot

3、配置镜像构建任务

  • 你需要先在 cr.console.aliyun.com 上创建一个镜像仓库,然后在流水线中进入“镜像构建并推送至阿里云镜像仓库”的任务进行编辑。点击”新建服务授权”,进行阿里云授权。同意授权之后,Flow 会将创建好的服务授权自动回填写到表单中。

EDAS431EDAS432

  • 接下来完成区域、仓库的选取。标签填入“${DATETIME}”,表示以流水线触发时的时间戳作为镜像的标签。Dockerfile 路径填入” Dockerfile2 ”

EDAS433
  • 配置好之后再“镜像构建并推送至阿里云镜像仓库”任务的下方可以看到该任务输出的变量,这些变量可以在后续的任务中引用。关注其中的第二个和第三个变量即可,其中第二个是该镜像地址的公网地址,第三个是该镜像地址的VPC地址。这里推荐将镜像仓库和ACK集群放在同一个集群,然后在后续的部署任务中选择VPC地址,以加速部署过程。

EDAS434

4、配置部署任务

点击“EDAS Kubernetes 应用发布”任务,进入配置。点击”新建服务授权”,进行 EDAS 服务授权,完成授权后可选择您已有的 EDAS Kubernetes 应用;选择你要部署的镜像,关注其中的第二个和第三个即可,其中第二个是该镜像地址的公网地址,第三个是该镜像地址的VPC地址;同时你可以选择你的部署策略,若你的 EDAS 应用有多个 POD,可以选择分批发布,每次分批发布之间需要手动确认。

EDAS441EDAS442

5、添加人工卡点

为了保证经过审批的制品才能进入部署环境,需要添加一个人工卡点,这里假设这个环境是测试环境,需要有测试管理员来审批才能进入。

首选需要在企业中创建一个角色”测试管理员“,并将企业用户”张三”的角色设置为该角色。

EDAS451EDAS451EDAS453

然后回到流水线继续进行配置,在 EDAS Kubernetes 部署前面添加一个任务,搜索”人工卡点“,并按照角色进行配置:

EDAS454EDAS456EDAS458

以上演示了如何添加一个进入测试环境的卡点,添加生产环境的卡点也是类似的,这里不再赘述,可以类似的进行配置。

6、运行流水线

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

扫描、单测及构建上传的任务自动完成,并停在了卡点上。普通人员无权限通过,切换到张三的账号之后,可以通过或者拒绝。

EDAS461

点击”验证通过“,流水线会进入 EDAS Kubernetes 部署的任务。由于配置了分两批,手动确认,所以在部署完第一台之后,会暂停,点击“更多”查看可进行的操作:

EDAS462

你可以选择

1.终止本次变更

2.继续第二个 pod 的发布

3.跳转到 EDAS 控制台查看更多信息

点击继续”恢复变更”之后,可以看到 Flow 继续完成了本次部署。

EDAS463

7、通知

为了更好的进行协作,Flow 提供了通知能力在流水线不同的生命周期节点上进行通知。一般来讲开发团队会关心部署的成功和失败,那么可以将该事件推送到团队的钉钉群中,配置方式如下,点击”添加插件”,选择钉钉机器人通知,填入 webhook 地址,运行时机选择”失败“,”成功”

EDAS471

再次运行之后,就会收到相应的通知:

EDAS473

8、在 Codeup 代码库中查看结果

若配置的代码库是云效 Codeup 代码库,还可以在 Codeup 代码库中直观看到流水线结果。

EDAS481

除查看执行结果外,还可以设置 Flow 流水线检测作为合并前的检测卡点。

EDAS482

五、结语

通过以上的操作流程,就可以建立起来一个协同多角色的流水线。接下来你可能想再了解其中的一些细节:

1.定制化代码扫描规则定制化扫描及单元测试通过规则