Last Updated on 2024-05-14 by likun.gong
近期又接触了阿里云 flow 这个工具,发现自己对 CI、CD 这块一直没有比较成型的记忆,所以简单整理记录一下。
CI CD是什么
CI:持续集成,开发人员在每次更改代码后都会将代码提交到版本控制系统。然后,CI 服务器会自动构建、测试和验证代码。
CD:持续交付/部署,持续部署到服务器中。
CI、CD 的整个过程都是围绕着自动化产生的,力求做到更快、更可靠的交付。
制品
制品可以理解是 CI 的产物,它可以是一个 Jar 包、一个 Docker 镜像、一个二进制文件。
制品是连接 CI 、CD 的传动轴。
制品不应该是死的,应该给它赋予 元数据,这些元数据可以标识制品是否被测试过、是否符合上线的标准,从而定义好 制品的生命周期。Jfrog Artifactory 很好的体现了这一点,而 Nexus 只是单纯的存储仓库,想要做到元数据,还需要额外的系统进行配合。
制品生命周期:
- 开发阶段,对应 dev 仓库,保留最近15天的数据
- 测试阶段,对应 test 仓库,保留最近15天的数据
- 预发布阶段,对应 stage 仓库,制品永久保留
- 正式发布,对应 release 仓库,制品应该是从 stage 仓库 Promete 提升上来的,也需要永久保留
如何设计CI CD流水线
目前主要接触过 2 种设计:
- CI、CD 所有功能都集中在一条 pipeline 中。这种方法适用于 pipeline 不复杂的情况,能够一步到位,完成所有事情。
- CI、CD 分两条不同的 pipeline,各自负责相应的事情。通过制品使 CI、CD 关联起来,分开的 CI、CD 相对更加灵活,权限管控更加方便。
串行和并行:例如代码扫描和编译和并行执行,提升效率
在核心的功能之外,我们应该引入单元测试、自动化集成测试、代码扫描等功能,来保证制品的质量。
发表回复