热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

中的_我眼中的CICD

篇首语:本文由编程笔记#小编为大家整理,主要介绍了我眼中的CICD相关的知识,希望对你有一定的参考价值。前言本文基本就是Tho

篇首语:本文由编程笔记#小编为大家整理,主要介绍了我眼中的CICD相关的知识,希望对你有一定的参考价值。



前言

本文基本就是 ThoughtWorks 文集中一键发布的读后感。


持续集成

持续集成也就是 CI,是敏捷软件开发中应用最广泛的技术实践,也是极限编程核心技术实践之一。CI 是指开发人员一旦将代码提交到版本控制系统之后,就进行构建,并运行一系列测试套件的过程。


产出物的管理

现在管理产出物一般使用开源的 Nexus3 或者商业的 artifactory。现在产出物比较推荐的形式就是容器镜像,遵循不可变基础实施这种技术实践,容器能极大的提高各个环境的一致性。还有需要注意的点就是产出物流过整个流水线,就是说各个环境使用的容器镜像都是一样的,如果在各个环境中有不一样的地方就通过配置管理解决,我推荐携程开源的 Apollo。


第一道门--提交测试

开发人员一提交代码,就自动触发持续集成的流程,比较推荐 git 的 pre-commit hook,通过自定义脚本的形式实现整个构建的过程,大家也可以看看持续集成僵死,这个构建过程应该包含所有的单元测试和一些冒烟测试,还有其他一些能证明其质量的测试。

这些测试的目的就是尽早失败,这也是质量内建的体现。开发人员必须等到这些测试全部通过之后才能进行下一个任务,从软件开发的角度,问题发现的越晚解决问题的成本就越高,这个过程通常是很快的。

只要提交测试通过了一般来讲就可以进行下一个任务了,但是有一个很重要的前提就是,这个阶段能发现绝大多数问题,如果很多问题是后面的阶段发现的,就说明需要加强一下提交测试了。这里推荐能极大提高这一阶段质量的极限编程工程实践 TDD 或者 TDD 的进阶实践 TCR。

最初我们把所有的单元测试作为提交测试,如果某个问题在后续阶段中经常出现,就需要为其编写测试并将其加入到提交测试中。


第二道门--验收测试

验收测试是根据用户故事的验收条件编写,用于证明我们的软件满足验收条件。用户故事需要遵循 INVEST(Idependent, Negotiable, Valuable, Estimable, Small, Testable)原则。我们的自动化部署系统只会部署那些通过所有验收测试的软件版本。


部署到生产

这个阶段要尽量做到自动化,自动化能消除很多错误的来源。

刚部署到线上的应用我们一般会运行一些简单的测试来证明该应用确实可用,部署阶段还可以选择蓝绿或者金丝雀发布,这种方法也被称为将部署与发布解耦。


后续的测试阶段

一直到验收测试完成,所有的测试都应该是自动化的,但是自动化在大多数项目中后续的步骤就不那么试用了。那些通过验收测试的版本可以选择性的进入人工验收测试阶段或者性能测试阶段,亦或是直接部署到生产。

验收测试的后续阶段之间的关系以及自动化的程度并不是问题,而如何提供并管理这些持续集成过程的脚本才是需要考虑的事情。


总结

本文介绍的是敏捷软件开发,在产品的刚开始阶段,我们会把需求分成一个个的用户故事,每完成一个用户故事就运行一次验收测试,每个用户故事又会分成很多任务,每完成一个任务就会提交一次,同时就会运行一次提交测试。总的来说用本文介绍的方法构建软件不但可以提高生产率,还可以提高交付质量,降低交付压力。


推荐阅读
  • 在寻找轻量级Ruby Web框架的过程中,您可能会遇到Sinatra和Ramaze。两者都以简洁、轻便著称,但它们之间存在一些关键区别。本文将探讨这些差异,并提供详细的分析,帮助您做出最佳选择。 ... [详细]
  • PostgreSQL 最新动态 —— 2022年4月6日
    了解 PostgreSQL 社区的最新进展和技术分享 ... [详细]
  • 在编译BSP包过程中,遇到了一个与 'gets' 函数相关的编译错误。该问题通常发生在较新的编译环境中,由于 'gets' 函数已被弃用并视为安全漏洞。本文将详细介绍如何通过修改源代码和配置文件来解决这一问题。 ... [详细]
  • 探讨ChatGPT在法律和版权方面的潜在风险及影响,分析其作为内容创造工具的合法性和合规性。 ... [详细]
  • 优化SQL Server批量数据插入存储过程的实现
    本文介绍了一种改进的SQL Server存储过程,用于生成批量插入语句。该方法不仅提高了性能,还支持单行和多行模式,适用于SQL Server 2005及以上版本。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • Python 工具推荐 | PyHubWeekly 第二十一期:提升命令行体验的五大工具
    本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ... [详细]
  • 本章详细介绍SP框架中的数据操作方法,包括数据查找、记录查询、新增、删除、更新、计数及字段增减等核心功能。通过具体示例和详细解析,帮助开发者更好地理解和使用这些方法。 ... [详细]
  • 本文详细介绍了钩子(hook)的概念、原理及其在编程中的实际应用。通过对比回调函数和注册函数,解释了钩子的工作机制,并提供了具体的Python示例代码,帮助读者更好地理解和掌握这一重要编程工具。 ... [详细]
  • 访问一个网页的全过程
    准备:DHCPUDPIP和以太网启动主机,用一根以太网电缆连接到学校的以太网交换机,交换机又与学校的路由器相连.学校的这台路由器与一个ISP链接,此ISP(Intern ... [详细]
  • 主调|大侠_重温C++ ... [详细]
  • 本文详细介绍了Java中实现异步调用的多种方式,包括线程创建、Future接口、CompletableFuture类以及Spring框架的@Async注解。通过代码示例和深入解析,帮助读者理解并掌握这些技术。 ... [详细]
  • 本文将详细探讨 Java 中提供的不可变集合(如 `Collections.unmodifiableXXX`)和同步集合(如 `Collections.synchronizedXXX`)的实现原理及使用方法,帮助开发者更好地理解和应用这些工具。 ... [详细]
  • CentOS 7.6环境下Prometheus与Grafana的集成部署指南
    本文旨在提供一套详细的步骤,指导读者如何在CentOS 7.6操作系统上成功安装和配置Prometheus 2.17.1及Grafana 6.7.2-1,实现高效的数据监控与可视化。 ... [详细]
  • 本文详细介绍了Java库XChart中的XYSeries类下的setLineColor()方法,并提供了多个实际应用场景的代码示例。 ... [详细]
author-avatar
jack_liujh_598
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有