本文主要介绍镜像构建部署场景,多环境镜像晋级/复用最佳实践,保证“所发即所测”。
应用研发场景有效地管理镜像产物是确保软件快速、安全、可靠部署的关键环节。通常一个应用研发需要经过测试、预发、生产各个阶段,一种常用的研发模式如下:
-
测试阶段:
流水线部署特性 feature 分支构建、部署,进行测试环境开发验证。
-
预发阶段:
经过测试验证的 feature 分支通过 MR 代码合并请求提交到 master 分支,以主干分支构建镜像、部署预发布环境并提交测试验收。
-
生产阶段:
预发布环境测试验收通过,直接以验收通过的镜像进行生产发布,保证“所发即所测”。
上述流程中,怎么知道哪个镜像版本是预发验收通过的、可用于生产发布的呢?基于云效 Flow 流水线,我们有以下两种实践。
实践 1:通过「Flow 流水线源」
获取上一条流水线镜像产物
1. 预发阶段流水线配置和运行:从代码源开始,拉取 master 分支构建镜像并推送到镜像仓库、并部署到预发环境进行预发布验收。预发布验收完成通常可由测试同学、发布负责同学共同点击确认「验证通过」。
2. 生产阶段流水线配置:
i. 添加
Flow 流水线源
,选择上述预发流水线作为源,默认使用
最后一次成功执行
的版本。
ii. 生产环境部署任务,以
Kubernetes 镜像升级
任务为例,选择预发流水线的镜像产物进行部署。
3. 生产发布运行:
i. 选择预发
最后一次成功执行
版本运行生产流水线。
iii. 生产环境部署任务直接拉取预发流水线最后一次验证通过的镜像发布。
此外,Flow 支持流水线运行事件自动触发下一条流水线运行。通常适用于测试、预发镜像传递场景,测试环境验收通过后,自动触发预发环境部署。
1. 预发阶段流水线配置:从代码源开始,拉取 master 分支构建镜像并推送到镜像仓库;镜像标签可通过环境变量定义,如定义镜像版本号环境变量 R_VERSION。
2. 预发阶段流水线运行:运行预发流水线时,指定版本号构建部署。预发布验收完成通常可由测试同学、发布负责同学共同点击确认「验证通过」。
3. 生产阶段流水线配置:
i. 添加
制品源
,选择 ACR 镜像仓库,指定本应用的仓库,指定默认版本号。
ii. 环境部署任务,以
Kubernetes 镜像升级
任务为例,选择 ACR 镜像地址部署。同时支持公网地址和 VPC 地址。
4. 生产阶段发布运行:
此外,为了降低生产发布版本号选择错误的风险,还可以额外开启版本号过滤规则,约束仅满足规则的镜像版本才可用于生产部署。如仅满足 myapp-V* 的才可用于生产发布。
进阶实践:引入 ACR 镜像扫描
进行安全合规性检查
集成安全扫描工具,在镜像推送至仓库前后进行自动扫描,检测潜在的安全漏洞、许可证问题和恶意软件。Flow 流水线支持开启制品源自动触发,支持 ACR
镜像推送完成
或
镜像扫描完成
后自动触发流水线运行。
典型使用场景如下:预发阶段镜像构建完成并推送到 ACR、自动触发 ACR 镜像扫描、ACR 镜像扫描通过后自动触发预发环境部署。