持续交付搭配火山引擎容器服务、火山引擎镜像仓库,可完成容器化持续交付一站式体验。本文为您介绍如何通过持续交付的流水线实现容器服务 Kubernetes 部署。
当开发者在代码仓库提交变更后,持续交付将通过 Webhook 监听代码库的变动,发生符合条件的代码变更行为时,持续交付将自动触发一系列已配置在流水线中的任务,包括单元测试、镜像构建、镜像部署等,帮助开发者实现自动化部署。
当前持续交付提供以下三种任务,支持用户对火山引擎容器服务的 Kubernetes 集群进行部署。您可以根据实际情况选择需要的部署方式。
持续交付支持使用镜像构建推送至镜像仓库服务的产出物作为 Kubernetes 镜像升级使用的镜像。本文通过使用镜像构建推送至镜像仓库服务和 Kubernetes 镜像升级任务,完成对火山引擎容器服务 Kubernetes 集群中应用的部署。
编译构建 任务中的 编译命令 需要根据具体业务代码进行调整,错误的路径信息可能导致流水线运行失败。
容器服务
镜像仓库
持续交付
登录 持续交付控制台。
在左侧导航栏选择 工作区,进入 工作区 页面。
选择目标工作区名称,进入该工作区。
单击 创建流水线,弹出 选择流水线模板 对话框。
选择构建镜像的流水线模板。完成后单击 确定,进入 编辑流水线 页面。
配置代码源。
a. 单击输入源位置,弹出 配置代码源 对话框。
b. 按要求填写以下参数。
配置项 | 说明 |
---|---|
类型 | 选择代码仓库类型。根据准备工作中创建的代码源类型选择。 |
代码源 | 配置该流水线的代码源。选择准备工作中创建的代码源。 |
默认分支 | 默认分支为流水线运行时默认选用的代码仓库分支。支持选择或手动输入。 |
Webhook 设置 | Webhook 设置用于启用代码源触发规则,具体操作请参见 代码源触发 。本示例不启用。 |
c. 单击 确定,完成代码源配置。
配置镜像构建推送至镜像仓库服务。
a. 配置编译构建步骤。
配置项 | 说明 |
---|---|
步骤名称 | 默认为编译构建,支持自定义步骤名称。 |
语言 | 选择编译构建使用的语言。 |
版本 | 选择编译构建使用的语言版本,不同语言提供不同的预置版本。 |
编译命令 | 输入编译命令。命令框中为默认的编译命令,请根据实际业务自行调整。 |
b. 配置镜像打包推送至镜像仓库服务。
配置项 | 说明 |
---|---|
步骤名称 | 默认为镜像打包推送至镜像仓库服务,支持自定义步骤名称。 |
地域 | 选择要推送的镜像仓库所在的地域。 |
仓库实例 | 选择准备工作中已创建的目标仓库实例。 |
命名空间 | 选择准备工作中已创建的目标命名空间。 |
OCI制品仓库 | 配置要推送的 OCI 制品仓库。如果 OCI 制品仓库不存在,系统将自动创建。 |
镜像版本 | 自定义镜像版本号。本示例使用
|
contextpath | docker build 命令执行上下文路径。填写相对于代码根目录的路径,默认为. 。 |
多框架构建 | 如果您希望构建 linux/arm64 架构的镜像,或者希望同时构建 linux/arm64 和 linux/amd64 两种架构的镜像,请勾选多框架构建功能的启用框。本示例不启用多框架构建功能,默认构建 linux/amd64 架构的镜像。 |
Dockerfile | 选择文件路径,填写 Dockerfile 文件相对于代码库根目录所在路径,默认为./Dockerfile 。 |
产出物 | 该步骤的产出物为镜像,默认名称为 DockerOutput,支持自定义命名。 产出物可用于后续部署任务。 |
单击➕,新增阶段。
在新增的阶段单击 添加任务,选择 Kubernetes 镜像升级 任务。
配置 Kubernetes 镜像升级任务。
配置项 | 说明 |
---|---|
步骤名称 | 默认为 Kubernetes 镜像升级,支持自定义步骤名称。 |
部署资源 | 选择准备工作中接入的容器服务集群。 |
命名空间 | 选择准备工作中记录的命名空间。 |
应用类型 | 选择 Deployment 及准备工作中记录的 Deployment 名称。 |
容器名称 | 选择准备工作中记录的 Container 名称。 |
镜像 | 选择上游产物,选择前序镜像构建推送至镜像仓库服务的产出物。 |
超时时间 | 设置自动超时时间。任务运行时长超过该时间,则判断部署失败,系统自动触发回滚操作,回滚到升级前版本。本示例保持默认配置 300 s。 |
其余页签保持默认配置,单击页面右下角 保存,完成创建流水线。
运行流水线。
配置项 | 说明 |
---|---|
代码源 | 显示该条流水线使用的代码源。 |
目标 | 选择流水线拉取代码的方式,支持按照分支、Tag、Commit ID 三种方式拉取代码。此处使用创建流水线时设置的默认分支。 |
运行说明 | 添加本次运行的备注信息,可以为空。 |
Kubernetes 镜像升级成功,所有新版本实例均处于 Running 状态。
您也可以登录容器服务控制台查看已升级的镜像。
在镜像升级的基础上额外配置以下部署策略,可实现按实例分批滚动发布,保证滚动发布过程更加可控。
参见 Kubernetes 镜像升级 的 前提条件 。
Kubernetes 滚动发布和 Kubernetes 镜像升级的操作方法类似,仅需将流水线中的 Kubernetes 镜像升级 任务替换为 Kubernetes 滚动发布 任务。配置 Kubernetes 滚动发布 任务之前的操作方法参见 Kubernetes 镜像升级。
配置 Kubernetes 滚动发布 任务。
配置项 | 说明 |
---|---|
步骤名称 | 默认为 Kubernetes 滚动发布,支持自定义步骤名称。 |
部署资源 | 选择准备工作中接入的容器服务集群。 |
命名空间 | 选择准备工作中记录的命名空间。 |
服务名称 | 选择或输入 Kubernetes 滚动发布的目标 Service。 |
应用类型 | 选择 Deployment,并设置 Service 关联的 Deployment 名称。 |
容器名称 | 选择或输入待部署的具体 Container 名称,确保 Pod 中存在多个 Container 时应该升级对应的镜像。 |
镜像 | 选择上游产物,选择前序镜像构建推送至镜像仓库服务的产出物。 |
部署策略 |
|
其余页签保持默认配置,单击页面右下角 保存,完成创建流水线。
运行流水线。
配置项 | 说明 |
---|---|
代码源 | 显示该条流水线使用的代码源。 |
目标 | 选择流水线拉取代码的方式,支持按照分支、Tag、Commit ID 三种方式拉取代码。此处使用创建流水线时设置的默认分支。 |
运行说明 | 添加本次运行的备注信息,可以为空。 |
流水线运行到 Kubernetes 滚动发布任务时,每个批次发布完成后,流水线将进入暂停状态,页面展示 立即部署 和 立即回滚 按钮。手动确认继续部署后,触发下一批次的发布,直至所有批次都发布完成。
Kubernetes 滚动发布成功,所有新版本实例均处于 Running 状态。
您也可以登录容器服务控制台查看已升级的镜像。
持续交付支持用户基于 YAML 资源描述文件创建 Kubernetes 发布任务,将代码仓库中的 YAML 文件或自定义 YAML 文件部署到 Kubernetes 集群中。本文介绍如何将代码仓库中的 YAML 文件部署至容器服务 Kubernetes 集群。
使用文件路径时,需要配置 YAML 文件在代码仓库根目录的相对路径。
登录 持续交付控制台。
在左侧导航栏选择 工作区,进入 工作区 页面。
选择目标工作区名称,进入该工作区。
单击 创建流水线,弹出 选择流水线模板 对话框。
选择构建镜像的流水线模板。选择空白模板,单击 确定,进入 编辑流水线 页面。
配置代码源。
a. 单击输入源位置,弹出 配置代码源 对话框。
b. 按要求填写以下参数。
配置项 | 说明 |
---|---|
类型 | 选择代码仓库类型。根据准备工作中创建的代码源类型选择。 |
代码源 | 配置该流水线的代码源。选择准备工作中创建的代码源。 |
默认分支 | 默认分支为流水线运行时默认选用的代码仓库分支。支持选择或手动输入。 |
Webhook 设置 | Webhook 设置用于启用代码源触发规则,具体操作请参见 代码源触发 。本示例不启用。 |
c. 单击 确定,完成代码源配置。
单击➕,新增阶段。
在新增的阶段单击 添加任务,选择 kubectl 发布 任务。
配置 kubectl 发布任务。
配置项 | 说明 |
---|---|
步骤名称 | 默认为 kubectl 发布,支持自定义步骤名称。 |
部署资源 | 选择准备工作中接入的容器服务集群。 |
YAML 文件 | 选择文件路径,填写需要部署的 YAML 文件在源码中的相对路径,本示例为./namespace_deployment.yaml 。 |
镜像引用 | 支持设置变量名供自定义 YAML 文件引用上游产物生成的镜像。本示例不使用。 |
其余页签保持默认配置,单击页面右下角 保存,完成创建流水线。
运行流水线。
配置项 | 说明 |
---|---|
代码源 | 显示该条流水线使用的代码源。 |
目标 | 选择流水线拉取代码的方式,支持按照分支、Tag、Commit ID 三种方式拉取代码。此处使用创建流水线时设置的默认分支。 |
运行说明 | 添加本次运行的备注信息,可以为空。 |
kubectl 发布成功,可查看对应运行日志获取部署信息。
您也可以登录容器服务控制台检查部署完成的 Namespace 和 Deployment。