测试代码的行为是软件发布过程中必不可少的步骤,但彻底测试也将极为耗时。
任何 CI/CD 管道的中心部分都是在每个构建中运行的一系列
自动测试
。 尽管编写自动化测试需要投入时间和专业知识,但同时也会带来可观的收益。
任何必须遵循手动测试脚本的开发者都清楚,测试是一个需要注意力高度集中的重复过程。 即使是最为敬业的测试人员也难免在工作时犯困,因为他们会重置环境,然后对一个微小的更改执行十几二十次的相同步骤。
自动化测试可确保测试始终如一地执行,从而使结果更加可靠。 因为自动化测试比相同内容的手动测试运行速度更快,因此可以更频繁地进行测试。
定期彻底测试您的代码意味着您可以更快地发现错误,因此可以减少在这些错误之上构建的功能,从而能够更轻松地修复错误。 随着时间的推移,代码质量会越来越高。
完成第一层自动化测试方面的投入后,您可以将从手动运行这些测试中省下的时间用于开发其他层级的自动化测试(例如端到端测试或性能测试)以及进行手动探索性测试。
后者可将您的质量保证或测试工程师的创造性技能用于识别新的故障模式,而他们的发现可用于扩展您的测试覆盖率。
疏通生产路径
众所周知,无论是练习投篮还是掌握音阶都有着熟能生巧的道理,这在发布软件方面也同样适用。 采用 CI/CD 最好循序渐进,从 CI 实践开始并逐步构建您的管道。 随着您开始更频繁地部署更改,您将能确定当前流程中拖慢您工作进度的痛点和步骤,例如在测试环境中刷新数据或必须在部署到特定计算机上之前重新配置参数。
为构建、测试、环境创建和部署添加
自动化
,可使每个步骤都一致且可重复。 各个步骤得到分解后,您可以持续优化各个阶段以使您的流程更加高效。 CI/CD 发布工作将从需要多个团队持续数天才能完成的重大事件,逐渐成熟并转变为熟悉且可预见的事件。
加快错误修复
虽然
自动化测试
能够有效提高代码质量,但仍偶有错误潜入生产环境的可能。 如果您需要定期提交更改并频繁交付,则每个正式发布版本都将仅含相对少量的代码更改,从而使查找问题原因变得更加容易。 随着提交趋于细化,如果您决定撤销更改,则可能不太愿意相应地采取其他实用更改。
在急切地需要将修复投入到生产中时,人们容易在手动测试方面敷衍了事以节省时间,尽管这有可能会将新的错误引入到生产中。 使用 CI/CD 管道,运行自动化测试不再是一笔可观的开销,因此可以有效降低对于质量的妥协。
提高架构效率
自动化是任何 CI/CD 管道的核心部分,旨在使发布流程可重复且可靠。 在实现持续集成的早期阶段,您的重点工作将为自动化构建过程以及编写和运行自动化测试。 建立扎实的 CI 基础之后,下一阶段是自动化部署构建的测试和暂存环境。
采用“架构即代码”方法涉及到对创建相关环境实施自动化。 无需手动管理单独的服务器,而是编写服务器配置脚本并存储在
版本控制
中,这样就可以使新环境快速上线并避免意外更改和不一致的风险。
这不仅可使持续交付阶段更快且更稳健,而且还可以使您在尽可能避免干扰开发工作的情况下快速响应对其他预览和培训环境的请求。
进度可测
许多支持自动化 CI/CD 的可用工具也可以对流程进行测定,从而为您提供从构建时间到测试覆盖率以及从缺陷率到测试修复时间的一系列指标。 有了这些数据,您就可以确定需要注意的领域,从而可以不断改进您的管道。 构建速度慢可能表明需要增加容量,而平均修复时间增加可能是存在过程或文化问题的迹象。
相反,各项指标也理所当然地会呈现令人欣喜的结果:不断提高代码测试覆盖率、降低缺陷率或提高发布频率,这些指标都属于可圈可点的团队成果,是良好工作文化的标志。 此举措的另一项优势是能够衡量您的 CI/CD 工作流支持组织实现其目标的效果如何。
反馈循环更加紧密
快速反馈是 DevOps 方法的关键部分,在整个管道内的各个环节中均有所应用。 它从自动化构建和测试步骤开始,可通知您刚刚出现的问题,从而避免了原始工作与结果之间存在的显著延迟问题,使您可以有效提高工作效率及效果。
同样,与每隔几个月发布一个大型版本并对其进行批量更改相比,定期发布更新会为您的构建提供更为及时的反馈。 通过收集反馈、观察用户行为并跟踪关键性能指标,您可以确定哪些部分运行良好以及优先进行修改和改进。
频繁的发布节奏还将使您有机会尝试备选设计或行为 – 可通过 A/B 测试运行并排对比,或者通过部署新版本并在一段时间后对比结果。
提高您在
持续部署
周期内的洞察力,从而使您能够在进行更改后立即得知其表现效果。 这意味着您可以继续进行迭代和调整,而不会因编码和发布之间存在显著的延迟而导致上下文丢失。
协作和沟通
DevOps 既可构建协作文化,又可构建新的流程和工具。 要开始使用 CI/CD,您需要着手打破团队之间的障碍,并鼓励促进交流。
在为用户提供满足其需求的产品这一总体目标上达成共识并了解实现该目标所涉及的所有步骤,使每个人都能专注于达成需实现的目标,而摆脱团队职权范围的束缚。
打破开发部门与运营部门之间相互孤立的局面是一个良性循环的开始。
CI/CD 管道
为产品构建工作中所涉及的多种职能部门和专家提供了机会,从产品
安全
专家到营销团队,均可更清晰地了解软件开发过程并进行更加密切的相互协作。
许多用于帮助管理构建的
CI/CD 工具
也可以使非开发者方便地获知准备发布的内容,而支持访问暂存环境则使非开发者可以参与到构建工作中并针对构建内容提供反馈。 共享即将发布的内容、用法指标和实验结果的详细信息,可以促进广泛的交流,而交流转而又能够培养创新。