多环境镜像晋级/复用最佳实践

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 本文介绍了在应用研发场景中,如何通过阿里云服务实现镜像构建部署的高效和安全。主要关注两个实践方法来确保“所发即所测”。

作者:木烟


本文主要介绍镜像构建部署场景,多环境镜像晋级/复用最佳实践,保证“所发即所测”。


场景介绍


应用研发场景有效地管理镜像产物是确保软件快速、安全、可靠部署的关键环节。通常一个应用研发需要经过测试、预发、生产各个阶段,一种常用的研发模式如下:


  • 测试阶段:流水线部署特性 feature 分支构建、部署,进行测试环境开发验证。
  • 预发阶段:经过测试验证的 feature 分支通过 MR 代码合并请求提交到 master 分支,以主干分支构建镜像、部署预发布环境并提交测试验收。
  • 生产阶段:预发布环境测试验收通过,直接以验收通过的镜像进行生产发布,保证“所发即所测”。

image.png

上述流程中,怎么知道哪个镜像版本是预发验收通过的、可用于生产发布的呢?基于云效 Flow 流水线,我们有以下两种实践。


实践 1:通过「Flow 流水线源」获取上一条流水线镜像产物


image.png

1. 预发阶段流水线配置和运行:从代码源开始,拉取 master 分支构建镜像并推送到镜像仓库、并部署到预发环境进行预发布验收。预发布验收完成通常可由测试同学、发布负责同学共同点击确认「验证通过」。

image.png

2. 生产阶段流水线配置:

i. 添加 Flow 流水线源,选择上述预发流水线作为源,默认使用最后一次成功执行的版本。ii. 生产环境部署任务,以 Kubernetes 镜像升级任务为例,选择预发流水线的镜像产物进行部署。

image.png

image.png

3. 生产发布运行:

i. 选择预发最后一次成功执行版本运行生产流水线。ii. 生产发布人工卡点验证通过。iii. 生产环境部署任务直接拉取预发流水线最后一次验证通过的镜像发布。

image.png

image.png

此外,Flow 支持流水线运行事件自动触发下一条流水线运行。通常适用于测试、预发镜像传递场景,测试环境验收通过后,自动触发预发环境部署。

image.png

实践 2:通过「ACR」制品源获取镜像


image.png

1. 预发阶段流水线配置:从代码源开始,拉取 master 分支构建镜像并推送到镜像仓库;镜像标签可通过环境变量定义,如定义镜像版本号环境变量 R_VERSION。

image.png

image.png

2. 预发阶段流水线运行:运行预发流水线时,指定版本号构建部署。预发布验收完成通常可由测试同学、发布负责同学共同点击确认「验证通过」。

image.png

3. 生产阶段流水线配置:

i. 添加制品源,选择 ACR 镜像仓库,指定本应用的仓库,指定默认版本号。ii. 环境部署任务,以 Kubernetes 镜像升级任务为例,选择 ACR 镜像地址部署。同时支持公网地址和 VPC 地址。

image.png

image.png

4. 生产阶段发布运行:

i. 选择指定镜像版本运行生产流水线。

ii. 生产发布人工卡点验证通过。

iii. 生产环境部署任务拉取指定镜像发布。

image.png

此外,为了降低生产发布版本号选择错误的风险,还可以额外开启版本号过滤规则,约束仅满足规则的镜像版本才可用于生产部署。如仅满足 myapp-V* 的才可用于生产发布。

image.png

image.png

进阶实践:引入 ACR 镜像扫描进行安全合规性检查


集成安全扫描工具,在镜像推送至仓库前后进行自动扫描,检测潜在的安全漏洞、许可证问题和恶意软件。Flow 流水线支持开启制品源自动触发,支持 ACR 镜像推送完成镜像扫描完成后自动触发流水线运行。典型使用场景如下:预发阶段镜像构建完成并推送到 ACR、自动触发 ACR 镜像扫描、ACR 镜像扫描通过后自动触发预发环境部署。

image.png

1. 配置预发 CI 流水线,从代码开始构建镜像并推送到 ACR 镜像仓库。


2. 配置预发 CD 流水线:

i. 流水线 ACR 制品源,开启制品源触发,触发事件选择镜像扫描完成

image.png

ii. 复制上述 Webhook 地址。


访问阿里云容器镜像服务[1]控制台,进入流水线中配置的镜像仓库实例,点击事件通知->创建规则;设置事件规则名称、设置事件通知触发的事件类型(目前 Flow 仅接收镜像扫描完成镜像推送完成两个事件自动触发)、设置事件生效范围(可设置镜像版本过滤的正则规则,在该镜像仓库下只有符合正则规则的镜像版本才会触发事件通知);下一步,通知方式选择 HTTP,并将复制的 Webhook 地址配置到通知地址后保存即可。

image.png

image.png

iii. 配置预发环境部署任务,同上。


3. 点击运行 CI 流水线构建镜像,推送到 ACR 镜像仓库,自动触发 ACR 镜像扫描,可以查看安全扫描结果。

image.png

image.png

4. 镜像扫描通过,自动触发预发 CD 流水线,自动部署预发环境进行验证。

image.png

相关链接:

[1] 阿里云容器镜像服务

https://account.aliyun.com/login/login.htm?oauth_callback=https%3A%2F%2Fcr.console.aliyun.com%2F&lang=zh


点击此处,试用云效流水线 Flow,注册即享每月 1800 分钟的免费运行时长。

相关实践学习
通过workbench远程登录ECS,快速搭建Docker环境
本教程指导用户体验通过workbench远程登录ECS,完成搭建Docker环境的快速搭建,并使用Docker部署一个Nginx服务。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
1月前
|
Docker 容器
项目基础服务部署
项目基础服务部署
13 1
|
1月前
|
存储 Kubernetes 数据安全/隐私保护
总结归纳Kubernetes | 一站式速查知识,助您轻松驾驭容器编排技术(配置与密码安全)
总结归纳Kubernetes | 一站式速查知识,助您轻松驾驭容器编排技术(配置与密码安全)
59 0
|
1月前
|
运维 Kubernetes 网络协议
总结归纳Kubernetes | 一站式速查知识,助您轻松驾驭容器编排技术(服务治理与网络访问)
总结归纳Kubernetes | 一站式速查知识,助您轻松驾驭容器编排技术(服务治理与网络访问)
43 0
|
1月前
|
Kubernetes API 调度
总结归纳Kubernetes | 一站式速查知识,助您轻松驾驭容器编排技术(水平扩展控制)
总结归纳Kubernetes | 一站式速查知识,助您轻松驾驭容器编排技术(水平扩展控制)
70 0
|
存储 Prometheus Kubernetes
阿里 sealer 是如何实现整个集群一键交付的?
顾名思义,和操作系统 .iso 镜像或 Docker 镜像类似,集群镜像是用一定的技术手段把整个集群的所有文件以一定格式打成的一个资源包。
870 0
阿里 sealer 是如何实现整个集群一键交付的?
|
安全 Cloud Native 算法
《云原生架构容器&微服务优秀案例集》——01 互联网——唱鸭 轻松玩转 DevSecOps,用 ACR EE 构建安全高效交付流程
《云原生架构容器&微服务优秀案例集》——01 互联网——唱鸭 轻松玩转 DevSecOps,用 ACR EE 构建安全高效交付流程
350 0
|
Kubernetes Devops Java
建木在 Rainbond 上使用实践
建木 是一个面向 DevOps 领域的极易扩展的开源无代码(图形化)/低代码(GitOps)工具,可以帮助用户轻松编排各种DevOps流程并分发到不同平台执行
|
Kubernetes 安全 机器人
Lyft 微服务研发效能提升实践 | 3. 利用覆盖机制在预发环境中扩展服务网格
Lyft 微服务研发效能提升实践 | 3. 利用覆盖机制在预发环境中扩展服务网格
1207 0
Lyft 微服务研发效能提升实践 | 3. 利用覆盖机制在预发环境中扩展服务网格
|
存储 运维 Kubernetes
开发者测评:相比 Harbor,我选择 ACR 的三点原因
本次活动是为了帮助更多开发者了解容器镜像服务 ACR 的功能、使用方式和产品体验,从而在不同应用场景下,更好地进行容器镜像管理方案的选型。不少开发者在活动中发表了他们在这个过程中的思考,以及选择阿里云容器镜像服务 ACR 的原因。
开发者测评:相比 Harbor,我选择 ACR 的三点原因
|
缓存 JavaScript Ubuntu
纯干货!构建Dockfile镜像的十三个最佳实践点
编写.dockerignore文件 构建镜像时,Docker需要先准备上下文 ,将所有需要的文件收集到进程中。默认的上下文包含Dockerfile目录中的所有文件,但是,实际上我们并不需要.git目录,.vscode目录、.idea目录等内容。 .dockerignore 的作用和语法类似于 .gitignore,可以忽略一些不需要的文件,这样可以有效加快镜像构建时间,同时减少Docker镜像的大小。

热门文章

最新文章