写点什么

CI/CD 最佳实践的基本原则

2020 年 9 月 30 日

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 流水线来发布软件,以提高代码质量和组织的编码规范。


原文链接:


https://blog.bitsrc.io/ci-cd-best-practices-bca0ef665677


2020 年 9 月 30 日 15:002187

评论

发布
暂无评论
  • 架构师训练营 第十一周 个人感想

    0 期 3 班 4 组 杨娴艳

    2020 年 8 月 26 日

  • 代码入库到产品上线:Facebook 如何使用 CI/CD 满足业务要求?

    我会介绍持续集成、持续交付和持续部署,这3个工程方法的定义、作用,并以Facebook为参考,介绍具体的工程实践。

    2019 年 9 月 4 日

  • 抛砖引玉:敏捷开发实践会总是对我们有帮助么?

    我们在敏捷开发方面所付出的努力,真的会给我们所在的组织带来助益么?不过首先我们得弄清楚“助益”这个词对于整个组织而言意味着什么。这取决于组织发展的目标——如果我们所做的事情在推动组织向目标前进,那么刚才那个问题的答案就是“是的”,如果相反,那么答案就是“绝对不是”,我们甚至还会在无意中损害组织的利益。

  • 第 177 讲 | 胡键:创业公司如何打造高凝聚力高绩效的技术团队:工具篇

    打造一个团队,首先应该关注凝聚力,然后才是团队绩效。

    2019 年 2 月 26 日

  • 阿基米德微服务及治理平台

    演讲嘉宾张晋军,京东基础架构部服务治理组负责人,架构师。内容介绍当前,微服务在京东日益深入普及,服务的数量及种类日新月异,开始出现所谓的“微服务大爆炸”,在享受微服务带来的好处的同时,又日益开始被迫承受微服务带来的负面效应,这些负面效应大致有如下几方面: 调用端依赖的服务个数及每个服务的实例数越来越多,造成调用端的启动越来越慢; 当前的软负载均衡策略遇到挑战,急需优化、调整; 跨应用、跨系统的调用越来越多,调用关系和依赖关系日益复杂,可观察性越来越差; 各服务的信息比如入参/出参等散落在各个地方,服务调用者无法快速、准确、全面获取这些知识,沟通成本非常高; 跨语言支持日益迫切,基于库方式将开发者绑死在单一技术栈上,与微服务理念相悖; 缺乏灵活、智能的流量控制机制及相应的运维支持手段; 缺乏灵活、适度的安全机制; 特性增加与Bug修复升级非常困难。 基于以上原因,故决定开发京东新一代的微服务框架及其治理平台,该平台是阿基米德系列产品中的重要一员。幸运地是遇到了服务网格技术,该技术将业务逻辑与通信及服务治理等非业务逻辑进行了彻底解耦,为全面解决上述问题提供了极大的想象空间。当然,如何在京东如此大的体量下运用“服务网格”技术,并且做到与当前的JSF系统兼容及平稳过渡,是一个巨大挑战。此外,会重新定义新一代的微服务治理平台,该平台将引入服务集市的概念,为开发者提供集中、全面、准确的微服务知识体系;通过用户自定义服务属性的机制,进一步把治理平台向业务场景及业务架构拉近,使得业务在系统运维方面更加灵活自由;制定全局的服务身份体系,围绕该体系进行一系列安全控制。

    2018 年 9 月 12 日

  • 测试左移:测试如何应对新的开发模式?

    测试左移,指的是将测试向左扩展,让测试介入代码提测之前的部分。

    2019 年 9 月 30 日

  • 设计原则的一些感悟

    设计原则

    2020 年 6 月 17 日

  • 从小工到专家:聊聊测试执行环境的架构设计(上)

    广义上讲,测试执行环境除了包括测试执行机以外,还包括测试执行机的维护、集群的容量规划、测试发起的控制、测试用例的组织等等。这也就是我要和你的测试基础架构的定义。

    2018 年 9 月 28 日

  • 学习笔记丨数据结构与算法之贪心算法

    学习笔记

    2020 年 10 月 17 日

  • 架构师训练营第 1 期 week6 总结

    1、分布式数据库

    2020 年 10 月 31 日

  • 再见 2020!Apache RocketMQ 发布 4.8.0,DLedger 模式全面提升!

    “童年的雨天最是泥泞,却是记忆里最干净的曾经。凛冬散尽,星河长明,新的一年,万事顺遂,再见,2020!”

    2021 年 1 月 7 日

  • 架构师训练营 - 学习笔记 - 第六周

    学习还是要有组织的

    2020 年 7 月 13 日

  • 微软、谷歌、阿里巴巴等大厂是怎样应用软件工程的?

    每个公司,都有自己的历史和文化,他们的文化又影响了各自的软件开发模式。

    2019 年 6 月 13 日

  • Docker 镜像构建之 docker commit

    我们可以通过公共仓库拉取镜像使用,但是,有些时候公共仓库拉取的镜像并不符合我们的需求。尽管已经从繁琐的部署工作中解放出来,但是实际开发时,我们可能希望镜像包含整个项目的完整环境,在其他机器上拉取打包完整的镜像,直接运行即可。

    2020 年 8 月 27 日

  • 架构师训练营大作业 (一)

    架构师训练营大作业 (一)

    2021 年 1 月 3 日

  • 一次有效的产品需求头脑风暴

    如何组织一次有效的头脑风暴?

    2020 年 11 月 28 日

  • 只加两行代码,为什么用了整整两天时间?

    我愿意花时间确保每次遇到的bug都会被完全修复,这样我就无需再面对这个bug,也无需再花时间调查、修复并测试这个bug。

    2020 年 8 月 11 日

  • 传销组织的 CTO | 法庭上的 CTO(4)

    这是《法庭上的 CTO》系列第 4 篇,属于 “28 天写作营”(第六季)。

    2020 年 12 月 7 日

发现更多内容

9条消除if...else的锦囊妙计,助你写出更优雅的代码

苏三说技术

进程切换与线程切换的区别

码农的荒岛求生

线程 进程 进程线程区别

小马哥刷力扣 - LeetCode 9. 回文数

小马哥

LeetCode 算法和数据结构 28天写作

程序员如何变富

陆陆通通

赚钱 程序员赚钱 28天写作

人生苦短,开发用云 | 如何优雅完成程序员的侠客梦?

阿里巴巴云原生

人工智能 阿里云 Serverless 程序员 云原生

面试你也能收割Offer,Java程序员必会知识清单全在这份pdf文档里

Crud的程序员

Java 架构

[3/28]保障研发反应开发需求

俊毅

精选算法面试-优先队列

李孟

算法 队列 28天写作

未来五年数字经济九大技术趋势,区块链成数字时代刚需!

CECBC区块链专委会

人工智能

技术er,你还特立独行坚持技术的优雅性么?

三石

28天写作 技术与业务

赛博时代,拿什么盛放对逝者的思念?

脑极体

Spring Boot 中的项目属性配置

武哥聊编程

Java springboot SpringBoot 2 28天写作

来玩一玩Linux常见命令!

程序员的时光

Linux 程序员 28天写作

面试被问AQS、ReentrantLock答不出来?这些知识点让我和面试官聊了半小时!

Java鱼仔

Java 面试 并发 JUC

发达国家加紧数字货币政策布局

CECBC区块链专委会

数字货币

《价值》- 投资分析(4)

石云升

零售 28天写作 价值 投资分析

在CSDN的六载时光,由你来决定今年的博客之星

谙忆

一致性Hash算法Java版实现

Silently9527

Java 后端 一致性Hash算法

分布式唯一ID解决方案-雪花算法

JavaPub

Java 分布式

专科出身,2年进入苏宁,5年跳槽阿里,论我是怎么快速晋升的?

云流

Java 学习 程序员 面试

什么是TACACS?

网络技术平台

Experience Never Gets Old

三只猫

28天写作

甲方日常 84

句子

工作 随笔杂谈 日常

区块链与物联网融合发展的机遇与挑战

CECBC区块链专委会

人工智能

SD-WAN:网络走向业务

JiangX

创业 投资 网络 28天写作 SD-WAN

双非本硕,拿到字节offer后才发现师兄给的算法笔记有多重要

互联网架构师小马

Java 数据结构 面试 算法 面试求职

一文搞懂参数传递原理

云流

Java 编程 程序员

Python 条件判断

老赵

Python 28天写作

九个最容易出错的 Hive sql 详解及使用注意事项

五分钟学大数据

sql 大数据 hive

电动汽车的小历史及汽车方面的一个基础概念 (28天写作 Day5/28)

mtfelix

28天写作 电动汽车

【Mysql-InnoDB 系列】事务模型

程序员架构进阶

MySQL 架构 innodb 事务 28天写作

NLP领域的2020年大事记及2021展望

NLP领域的2020年大事记及2021展望

CI/CD 最佳实践的基本原则-InfoQ