Helm 作为 K8s 生态工具之一,将互相关联的多个资源(比如:Deployment、StatefulSet、Service、Ingress...)统一打包成一个整体(Chart)交给 K8s 运行。对于应用发布者而言,可以通过 Helm 打包应用、管理应用依赖关系、管理应用版本并发布应用到 Chart 仓库。 对于使用者而言,无需编写复杂的应用部署 YAML 文件,以便捷的方式在 K8s 上查找、安装、升级、回滚、卸载应用程序。

本文将介绍在 Zadig 中如何持续交付使用 Helm Chart 管理的应用。

首先需要准备应用的 Helm Chart 配置,本文中我们将使用 voting-app 案例来实践,如果你也使用此项目,可以选择以下方法,然后在系统中集成代码源。代码源集成的具体方法可点击 链接 查看。

克隆代码

voting-app 案例是一个简单的投票统计系统,包含 5 个微服务 db、redis、result、vote、worker,其 Helm Chart 配置目录结构说明如下:

zadig/examples/voting-app/chart # Chart 根目录
├── Chart.yaml                # Chart 中所必须的 chart.yaml 文件
├── templates                 # Chart 中的模板目录,5 个微服务的 K8s YAML 配置声明
│   ├── db.yaml
│   ├── redis.yaml
│   ├── result.yaml
│   ├── vote.yaml
│   └── worker.yaml
└── values.yaml               # Chart 默认的配置值

进入 Zadig 系统,点击新建项目

创建项目

填写项目名称 voting-app-demo -> 选择 K8s Helm Chart 项目 -> 点击立即新建 -> 点击下一步

创建项目创建项目

点击 从代码库同步 来创建服务。

创建服务

选择代码源等信息并选择 Chart 所在的文件夹后点击加载即可。其中代码源即为准备工作中集成的代码源,文件夹请勾选 examples/voting-app/chart

创建服务

加载文件夹内容后,系统会自动解析出整个 Chart 中的服务信息。点击添加构建来为服务配置构建,以便后续对该服务进行持续部署更新。

创建服务

我们以服务组件 examplevotingapp_vote 为例来演示,详细构建配置如下图所示。

#!/bin/bash
set -ex

cd $WORKSPACE/zadig/examples/voting-app/vote
docker build -t $IMAGE -f Dockerfile .
docker push $IMAGE

构建配置

保存构建配置后点击下一步

构建配置

点击创建环境,系统会自动创建 devqa 两套环境,待环境创建完毕后点击下一步

小贴士:

  1. 在后续的使用中,dev 环境可用于开发工程师日常自测联调;qa 环境可用于测试开发工程师做验收测试。
  2. 如果不需要系统自动创建的环境,也可以点击环境名右侧的编辑/删除/创建按钮来自定义。

创建环境创建环境

系统会自动创建 3 条工作流用于后续的持续交付,点击运行工作流 voting-app-demo-workflow-dev,更新 dev 环境的 vote 服务。

运行工作流运行工作流

在工作流任务中点击展开构建过程,可查看详细的构建日志,以及此次将构建出来的镜像产物。

运行工作流

待工作流任务执行完毕,进入到 dev 环境中,可发现 vote 服务的镜像信息被更新。

运行工作流

只需要在工作流中配置触发器,即可实现:有代码变更时,自动触发工作流执行部署更新服务的效果。

第一步:配置代码变更触发器

voting-app-demo-workflow-dev 工作流示例,编辑工作流配置触发器如下图。

触发器配置

第二步:代码改动后自动交付

以代码变更 pull request 事件为例,提交 pull request 后会自动触发工作流执行。

提交代码变更

待工作流运行完毕后查看环境,可见 vote 服务的镜像被自动更新。

触发效果