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

持续集成持续部署持续交付_您不进行持续集成!

持续集成持续部署持续交付今天,我将谈论开发人员的一个误解:持续集成是关于运行自动化集成管道的…什么是持续集成(CI)

持续集成持续部署持续交付

今天,我将谈论开发人员的一个误解:持续集成是关于运行自动化集成管道的…

什么是持续集成(CI)?

持续集成是一种以连续方式集成更改的过程。 这是什么意思?

想象一个团队,有6个人-3个开发人员和3个测试人员。 他们在每个季度发布的项目上工作。 他们使用2-3周冲刺的“准” scrum。 产品负责人将故事分解成一个单一的冲刺。 该团队遵循Github分支架构:

  • 开发分支-所有故事完成后将合并,并为故事(拉请求)单独分支。
  • 每个开发人员都有自己的故事。 在将拉取请求合并到开发分支之前,他们要求其他开发人员进行代码审查,并要求测试人员进行测试。 它们具有在每次提交时运行的自动集成管道。 管道包括短绒棉布,测试和捆绑(创建可运输的包装)。

在他们的情况下,2-3周的冲刺导致以下模式:

  • 开发人员“ A”有6-7天的实施时间,
  • 开发人员“ B”有一天的代码审查时间,
  • 开发人员“ A”有一天可以在代码检查后应用更改,
  • 测试人员大约需要3-7天的测试时间。

对?

让我们专注于以下分支树:

管道正在为每个提交运行,这意味着它们正在将其更改不断集成到代码库中,对吗?

没有! 开发分支的最新状态分布在3个不同的分支(拉请求)中。 这意味着管道分别确认了每个拉取请求的集成,并且开发分支有点“陈旧”……

没有人使用最新版本!

那么……我们如何进行持续集成?

让我们假设这个团队了解他们做错了什么。 他们希望以持续集成的方式开发软件。 开发过程必须如何改变?

每个开发人员每天至少需要合并一次更改。 当他们经常合并内容时,他们会使用最新的代码库。

但是我们不能跳过代码审查和测试!?

是的,您不能,也不应。 每个请求请求都应由其他开发人员进行审查。 如果所有反馈均已解决,功能的完整性检查已完成,并且集成管道为绿色,则表示您可以继续进行...

...是的,在将故事移交给测试之前,您应该合并提取请求。

为什么?

  1. 通过了Linters,通过了测试,并且已经构建了软件包。 自动化集成管道的重点在于以自动化方式运行测试。 如果您仍然需要测试人员,那么自动化是毫无意义的……
  2. 手动测试会使分支陈旧! 开发分支不包含您的拉取请求中的更改,因此该分支是陈旧的。 您的拉取请求没有在一天之内合并下来,因此拉取请求已过时。

如果我的拉取请求破坏了代码库怎么办?

好吧……您的更改阻止了其他人的合并,您必须尽快修复它。 但是不用担心...。 您的好友可能会帮助您找到问题并解决。

但这带来了很大的压力! 最后,事实并非如此。 每次事件都使您成为更好的程序员,并给其他团队成员带来情感上的约束。 您将在代码审查期间学习更多的注意,在实际合并之前先进行尝试。 这些情况会教您关心他人,并表明您可以信任自己的团队。

如果我没有按时完成故事怎么办?

别担心。 在一天之内完成所有工作非常困难。 如果该软件尚未交付生产,并且您的故事还没有100%完成。 没事。 要求审查。

一条规则:合并之前,管道必须为绿色!

理想情况下,永远不要合并未经测试的代码,因为以后很难更改它。 我鼓励您在进行持续集成的同时进行测试驱动开发(TDD)。

如果您的公司将软件交付生产,则可能需要功能切换。 功能切换开关是允许在生产环境中禁用功能的开关。

听起来很难? 根据您的需求,您可以将其简化为简单的if语句:

if (process.env.NODE_ENV !== 'production' ) {// your unfinished code.
}

您可能想 在Martin Fowler的博客 上内容

那现代的测试人员呢

Airbnb和Netflix不雇用他们。 他们的开发人员编写所有自动化测试。 如果某些东西太昂贵而无法自动化,他们会跳过它。 他们如何确认某些东西坏了? 他们有负责站点监视的站点可靠性工程师(SRE)。 当SRE识别出系统中的异常时,他们正在调查引入了哪些更改。 之后,他们决定如何处理它-恢复或修复它。

监控是新的测试

请记住:Airbnb运行着世界上最好的软件公司之一。 实施他们的流程将很昂贵,并且很难反映到您所在的公司。

在这里了解 更多 Airbnb如何开发产品的信息 :

我想,您的公司已经聘用了测试人员,并且不想摆脱他们。 在这种情况下,测试人员可以专注于难以自动化的事情-执行手动探索性测试,并验证视觉元素。

如果您的测试人员渴望学习编码,他们可能会参与编写自动化测试。 怎么做? 每个拉取请求均由两个人(测试人员和开发人员)开发。 开发人员公开接口(类,函数,方法),以便测试人员可以开始编写测试。

结果是:对类固醇编程。

免责声明 :最后一段是经验性的。 在为我的一位前雇主工作时。 两位,我和我的同事正在编写自动化测试套件。 我们正在提供标记为已跳过的测试用例,而开发人员正在其拉取请求中对其进行修复。 结果,我们提供了更好的质量,没有错误,并且我们改善了团队内部的沟通。 每个人都了解此功能的含义以及代码的工作方式。

摘要

如果您的代码库仅由少量贡献者修改,则进行持续集成可能不会带来很多好处。 随着团队的成长,流程开始使您放慢脚步。 您进行的代码审查多于编程,然后您解决了合并冲突……可爱……运送到生产环境需要很长时间—所有东西都需要一起测试,而且始终需要快速修复错误……如果此时,请与您的团队讨论关于过渡。

如果您有任何问题或建议,请写评论。

您可以在Medium和Twitter上与我联系或关注我。

资料来源:未来世界

翻译自: https://hackernoon.com/you-dont-do-continuous-integration-vz47534ux

持续集成持续部署持续交付



推荐阅读
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 本文详细介绍了如何在 Spring Boot 应用中通过 @PropertySource 注解读取非默认配置文件,包括配置文件的创建、映射类的设计以及确保 Spring 容器能够正确加载这些配置的方法。 ... [详细]
  • This document outlines the recommended naming conventions for HTML attributes in Fast Components, focusing on readability and consistency with existing standards. ... [详细]
  • 本文详细介绍了Java中org.w3c.dom.Text类的splitText()方法,通过多个代码示例展示了其实际应用。该方法用于将文本节点在指定位置拆分为两个节点,并保持在文档树中。 ... [详细]
author-avatar
懒训毛毛_770
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有