持续集成和持续部署(CI/CD)是许多组织使用的敏捷方法。它正在帮助这些组织有效、安全地发行软件。

根据 GitLab 2020 DevSecOps 调查,几乎 83%的开发人员表示,他们正在比以前更快、更频繁地发布代码。59%的公司表示他们几乎每天都要发布多次。而这是因为采用了 DevOps 方法,并且主要归功于持续集成、自动化测试和持续部署。

每个组织都试图在建立 CI/CD 流水线时引入自己的方法,最终找到完美的平衡,我们通常将其称为“最佳实践”。本文就来谈一些有效且安全的 CI/CD 流水线的基本原则。

可靠性

在软件开发生命周期中拥有 CI/CD 流水线工具是组织能够快速构建和交付应用程序的一大福音,但与此同时,选择正确的 CI/CD 工具也相当重要,其应当能够随业务组织发展而扩展,并且运行准确无误。而且,它还应该足够灵活,可以处理多种用例和多种软件交付需求。

CI 流水线应当很快

使 CI/CD 流水线尽可能快是非常重要的。我们所有的自动化测试都运行在开发环境中的 CI 流水线上,而其最终会被部署到生产环境中。因此,涵盖所有边缘情况和潜在的致命失效非常重要,同时,我们需要确保所有这些更改不会在我们的代码中造成任何无法预料的错误。因此,同时保持 CI 流水线简单、快速和安全非常重要。

随着微服务架构的广泛采用,CI 流水线变得简单明了(不同于单体架构的情形)。但是如果流水线任务繁重,最好移除一些不会产生重大影响的测试,并且记录下这种取舍。我们还应该确定测试的优先顺序。运行较快的测试应首先执行。例如,单元测试比较快,而且是程序功能或模块的基础,因此应当首先执行,然后再进行功能测试和集成测试。这样,我们可以尽早发现错误并节省时间。开发者应该在推送代码之前在本地运行测试以尽早发现错误。

在独立环境中构建和运行

从 CI/CD 流水线的安全性以及确保它类似于预发布环境和生产环境的角度讲,在独立的环境中运行 CI/CD 流水线一直都很重要,这可以确保我们的测试结果更加准确。

我们可以使用 Docker 或其他任何容器化工具来运行我们的测试套件,也可以在 Docker 容器中为我们的应用程序安装其他依赖。这样,我们可以确保测试在完全隔离的环境中运行,并且不受底层主机的任何影响。由于我们的 CI/CD 平台可以完全访问我们的代码仓库,因此大多数组织也习惯于在自己的云平台基础设施中部署 CI/CD 工具以确保安全。

许多组织迈出了更大一步,他们还在隔离环境中渲染和测试 UI 组件。在将它们作为独立的构建块交付并集成到一个或多个项目中之前,此过程是一种验证它们确实独立的方法(这通常使用 Bit(Github)完成)。

预发布环境和生产环境等价

建议始终保持预发布环境和生产环境等价,以避免运行测试时发生意外错误导致发布暂停这种小概率事件。我们的 CI/CD 流水线首先经过运行测试和在预发布环境中部署的阶段。测试后,该应用会自动升级(或手动部署)到生产环境。

使开发和测试环境完全等价于生产环境非常困难,但我们可以在需要时做出决定保持他们尽可能相似,并且了解我们正在做出的取舍。大多数组织还使用“蓝绿部署”或“金丝雀发布”的部署策略,在该策略中,我们首先在生产环境中部署应用并处理大约 1% 的流量。然后将流量提高到 100%,或者也可以较为轻松的回滚到之前的版本。

总结

所有 CI/CD 工具都不相同,每个组织都尽可能以最有效和便捷的方式利用 CI/CD。但以上是一些最佳实践,每个人都应注意并遵循这些最佳实践,以避免将来出现问题。每个组织都应授权并仅通过 CI/CD 流水线来发布软件,以提高代码质量和组织的编码规范。

CI/CD 最佳实践的基本原则相关推荐

  1. 猪八戒网CI/CD最佳实践之路

    序言 本文旨在介绍ZBJ DevOps团队倾力打造的DevOps平台中关于CI/CD流水线部分的实践.历经三次大版本迭代更新的流水线,完美切合ZBJ各种业务发展需求,在满足高频率交付的同时,提高了研发 ...

  2. SQL Server数据库连续集成(CI)最佳实践以及如何实现它们–测试,处理和自动化

    测试中 (Testing) Test databases should be processed with unit tests In many shops code is unit tested a ...

  3. 基于springboot的多环境应用CI/CD应用实践

    基于springboot的多环境应用CI/CD应用实践 持续集成/部署应用实践 1.jenkins配置 2.Gitlab配置 3.代码的自动编译打包 4.docker容器编排 5.jenkins执行d ...

  4. 实施有效有价值的CI / CD流水线实践分享

    原文地址: https://medium.com/@sanjayaben/how-to-build-an-efficient-ci-cd-pipeline-b5738ad567c8   我觉得这篇文章 ...

  5. Github continuous deployment (CD) 最佳实践

    About continuous deployment 您可以使用 GitHub 操作直接在 GitHub 存储库中创建自定义持续部署 (CD) 工作流. About continuous deplo ...

  6. 中国.NET开发者峰会特别活动-基于k8s的微服务和CI/CD动手实践报名

    2019.11.9 的中国.NET开发者峰会将在上海举办,到目前为止,大会的主题基本确定,这两天就会和大家会面,很多社区的同学基于对社区的信任在我们议题没有确定的情况下已经购票超过了300张,而且分享 ...

  7. ci/cd自动化测试_CI / CD管道加快测试自动化的16种最佳实践

    前言: 知其然,知其所以然.相较于DevOps而言,CI/CD是一个相对具象的概念.在 IT 企业中,CI/CD的应用愈加广泛,成为推动软件研发活动的重要基础设施服务,同时推动 DevOps 模式的实 ...

  8. GitLab CI/CD

    GitLab CI/CD 是一个内置在GitLab中的工具,用于通过持续方法进行软件开发: Continuous Integration (CI)  持续集成 Continuous Delivery ...

  9. 带你深入了解 GitLab CI/CD 原理及流程

    作者:狂乱的贵公子 cnblogs.com/cjsblog/p/12256843.html GitLab CI/CD 是一个内置在GitLab中的工具,用于通过持续方法进行软件开发: Continuo ...

最新文章

  1. 2020中国人工智能年度评选正在征集!开放4大类别7大奖项
  2. 决策树算法介绍及应用
  3. eplan单线原理图多线原理图_【原创分享】西门子PLC电路图高效设计——基于EPLAN与TIA Selection...
  4. 单片机小白学步系列(六) 单片机最小系统——麻雀虽小,五脏俱全
  5. 31、SAM文件中flag含义解释工具--转载
  6. C/C++ ultoa函数 - C语言零基础入门教程
  7. 2021年度618品牌营销分析报告
  8. 进入Activity后让EditText自动弹出小键盘
  9. CAN笔记(21) 服务数据对象
  10. this和super关键字
  11. C/C++语言经典、实用、趣味程序设计编程百例精解(2)
  12. html5 正式发布 2014,万维网联盟将于2014年推出HTML5标准
  13. 用FineReport报表系统构建资金监管平台
  14. 赤喀高铁正式通车,日立电梯助力赤峰西站开通运营
  15. hp服务器装系统键盘没反应,u盘装系统f12没反应怎么回事|u盘装系统按f12没反应怎么解决...
  16. Combining Sketch and Tone for Pencil Drawing Production 论文阅读(1)
  17. 拉勾网职位数据爬取与分析(一)
  18. 改后缀名不能导致图片格式的转换,以.png后缀名的图片不一定是png图片
  19. pdf怎么压缩又小又清晰?
  20. 为什么面试官对“我不会我可以学”不买账?

热门文章

  1. python numpy np.full(shape, fill_value, dtype=None, order='C')函数 以指定数值填充指定形状的数组
  2. tf里面InteractivateSession()与Session()的区别
  3. LVS的三种负载均衡以及高可用原理(VS/NAT、VS/TUN、VS/DR)
  4. 黑马程序员pink老师前端入门教程,零基础必看的h5(html5)+css3+移动端前端视频教程(CSS字体,文本)
  5. easyui树拖拽排序java_easyui tree 拖拽功能并将数据返回后台保存至数据库
  6. vba宏语言_三分钟了解Excel的程序语言VBA
  7. ddd模型的pom版本怎么管理_DDD 中的那些模式 — CQRS
  8. 手机号归属地区编码_这些关于手机号码的冷知识 你知道吗
  9. 队列表mysql,什么是在mysql中实现消息队列表的最佳方法
  10. php中删除数组元素的函数,php删除数组中的元素函数用法汇总