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