其他
聊聊 CI/CD 场景价值
作者:苏洋
来源:https://soulteary.com
接下来聊聊什么场景下需要 CI/CD ,它到底能带来什么样的变化?
与持续集成和持续交付关联最紧密的便是研发流程,那么有CI/CD和没有CI/CD的团队分别是什么样子的呢?
没有 CI/CD 的团队
项目创建 功能编写 代码提交 功能自测 代码 Review 合并发布分支 人工构建 人工部署 产品发布 人工观察线上质量 质量修复、持续改进(循环第3步开始的内容)
有部分自动化脚本的团队
项目创建 功能编写 代码提交 功能自测 代码 Review [这里可能使用了一些lint、coverage、risk scanner功能分摊了一些Review压力] 合并发布分支 [这里可能使用了一些脚本进行对非敏感内容进行自动合并] 人工构建 [有抽象构建过程为脚本,然后通过手工调用] 人工部署 [有抽象部署过程为脚本,然后通过手工调用] 产品发布 [有抽象发布过程为脚本,然后通过手工调用] 人工观察线上质量 [有编写一些监控程序,然后通过手工调用] 质量修复、持续改进(循环第3步开始的内容)
maven build
npm build
docker build
使用 CI/CD 基础设施的团队
项目创建 功能编写 代码提交 [CI工具介入] 功能自测 代码 Review [CI工具介入] 合并发布分支 [CI工具介入] 人工构建 [CI工具介入] 人工部署 [CD工具介入] 产品发布 [CI/CD工具介入] 人工观察线上质量 [CI工具介入] 质量修复、持续改进(循环第3步开始的内容)
如果你的研发流程是正常的,CI/CD并不改造你的研发流程,只是给你进行标准化的工程流水线改造。
在代码提交之后,将会根据提交分支进行不同的自动化处理: 代码常规检查 自动化单元测试 依赖漏洞检查 在代码 Review 阶段,因为上一阶段已经进行了 Code Style、代码底层实现 Code Lint等检查,相关reviewer只需要对逻辑和实现方案进行Review。 在合并发布分支阶段,可以自动检查是否冲突,如果没有冲突自动进行合并,有则进行通知,等待人工介入,人工只做必须介入的事情。 在构建过程,CI可基于标准的容器镜像进行构建,依赖被约束在稳定的镜像二进制包内,唯一的变量就是你有变动的代码,保障构建环境是可准确、可靠、可迁移的。因为使用 dockerfile 进行描述,容器环境的分析和升级也变的透明、可追溯。在构建结束将成功与否的结果告知工程师,但仅仅是告知即可,因为软件已经可以到下一个阶段进行自动化部署了。 在部署阶段,CI可基于上一步构建结果是否正确进行下一步的分发操作,包括交付测试使用的测试环境、给开发自行联调使用的开发环境、给团队成员验收使用的预发或者叫仿真环境、乃至线上正式的生产环境。 最后,当部署完成之后,等待人工介入完成产品上线切换,会触发CI的线上复查、监控验收。
CI/CD 价值小结
流水线标准化生产和交付 最大化减少人为介入和决策,提高交付效率、节约人力成本在机器可以做的很好的情况下的浪费。 环境标准化,避免硬编码的脚本带来后续升级改造成本或者绑架技术栈。 流程标准化有助于扩展性提升,连接研发流程的设施可以相对轻松的进行升级维护。 “简化”研发流程 开发人员可以更加专注于产品打磨,而非周边“乱七八糟”的一堆事情上。 研发质量辅助提升 原本需要人工执行的代码质量检查的操作,统一由机器去完成。 结合数据工具,可以针对性的自动化产出某个项目上线前后的数据变化,回馈产品、运营团队,辅助后续的产品决策。
【本周开课】
全球 IPv4 正式耗尽,过渡 IPv6 这些知识点不能错过
年轻时偷的懒,迟早是要还的。点亮