CI/CD 最佳实践的基本原则
持续集成和持续部署(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 最佳实践的基本原则相关推荐
- 猪八戒网CI/CD最佳实践之路
序言 本文旨在介绍ZBJ DevOps团队倾力打造的DevOps平台中关于CI/CD流水线部分的实践.历经三次大版本迭代更新的流水线,完美切合ZBJ各种业务发展需求,在满足高频率交付的同时,提高了研发 ...
- SQL Server数据库连续集成(CI)最佳实践以及如何实现它们–测试,处理和自动化
测试中 (Testing) Test databases should be processed with unit tests In many shops code is unit tested a ...
- 基于springboot的多环境应用CI/CD应用实践
基于springboot的多环境应用CI/CD应用实践 持续集成/部署应用实践 1.jenkins配置 2.Gitlab配置 3.代码的自动编译打包 4.docker容器编排 5.jenkins执行d ...
- 实施有效有价值的CI / CD流水线实践分享
原文地址: https://medium.com/@sanjayaben/how-to-build-an-efficient-ci-cd-pipeline-b5738ad567c8 我觉得这篇文章 ...
- Github continuous deployment (CD) 最佳实践
About continuous deployment 您可以使用 GitHub 操作直接在 GitHub 存储库中创建自定义持续部署 (CD) 工作流. About continuous deplo ...
- 中国.NET开发者峰会特别活动-基于k8s的微服务和CI/CD动手实践报名
2019.11.9 的中国.NET开发者峰会将在上海举办,到目前为止,大会的主题基本确定,这两天就会和大家会面,很多社区的同学基于对社区的信任在我们议题没有确定的情况下已经购票超过了300张,而且分享 ...
- ci/cd自动化测试_CI / CD管道加快测试自动化的16种最佳实践
前言: 知其然,知其所以然.相较于DevOps而言,CI/CD是一个相对具象的概念.在 IT 企业中,CI/CD的应用愈加广泛,成为推动软件研发活动的重要基础设施服务,同时推动 DevOps 模式的实 ...
- GitLab CI/CD
GitLab CI/CD 是一个内置在GitLab中的工具,用于通过持续方法进行软件开发: Continuous Integration (CI) 持续集成 Continuous Delivery ...
- 带你深入了解 GitLab CI/CD 原理及流程
作者:狂乱的贵公子 cnblogs.com/cjsblog/p/12256843.html GitLab CI/CD 是一个内置在GitLab中的工具,用于通过持续方法进行软件开发: Continuo ...
最新文章
- [BZOJ 3143][Hnoi2013]游走(高斯消元+期望)
- 【 C 】动态内存分配实用案例(一)之读取、排序和打印一列整形值
- linux 服务搭建DNS
- python turtle画彩虹-python绘制樱花,彩虹旋等
- python列表生成字典_Python 列表生成式 字典生成式
- java求面积_Java之简单图形面积计算
- OpenCV‘s Kalman filter卡尔曼滤波器的实例(附完整代码)
- BZOJ 1088: [SCOI2005]扫雷Mine( )
- C语言学习笔记--位运算
- 分数化简_分数应用题七讲 (一) 图示法解分数应用题
- 友盟统计java代码_SFAnalytics 分析友盟统计源码,反编译 SDK,还有部分没有 出来 android 259万源代码下载- www.pudn.com...
- Linux crontab
- 江苏约谈滴滴、T3出行等6家企业 因疫情防控落实不到位
- [Java] 蓝桥杯ADV-233 算法提高 队列操作
- dlib android 识别时间,android dlib调用
- Python常用模块库下载及安装
- 基于Java的项目--酒店客房管理系统
- 深度学习——反向传播(Backpropagation)
- 使用Python进行文件快速搜索(建立文件搜索索引)
- 总结各种RGB转YUV的转换公式
热门文章
- python 将布尔数组取反的方法 True False(b=(a==False))
- 问题排查:单表3000笔数据查询竟然要2秒?
- android找工作 2019,2019年真的很难找工作吗?
- Linux运维:CentOS7在防火墙中添加访问端口?
- python简单词频统计_python简单词频统计
- 32岁学python 人工智能_python深入学习好还是直接学人工智能好?
- matlab疲劳驾驶_第一本无人驾驶技术书
- 废旧纸箱做机器人图片_网购后的快递纸箱被你扔掉了吗?
- python注释可以辅助程序调试吗_Python 注释
- linux mysql插入中文乱码_解决Linux下Tomcat向MySQL插入数据中文乱码问题