本文来源:about.gitlab.com
作者:Valerie Silverthorne
译者:极狐(GitLab) 市场部内容团队
CI/CD 是 DevOps 成功实践的核心,想要实现现代化应用程序开发的团队,必须遵从 CI/CD 最佳实践。如何确保团队正确使用 CI/CD?以下内容供你参考。
CI/CD 既是技术流程,又是一种思想,还是一系列步骤......CI/CD 包括以上全部内容。简而言之,CI/CD 能让 DevOps 团队通过自动化来简化代码提交。
CI(持续集成) 简化了软件构建和源代码集成,实现版本控制,并通过自动化促进良好协作;
CI 结束后,持续交付(CD)开始自动化测试和部署。CD 不仅减少了花费在交付和部署过程中因手动操作所带来的诸多弊端,还能够让团队在管理软件生命周期方面,极大减少所使用的工具数量。
如果想用 CI/CD 来获得成功,那就让持续集成、持续交付及持续部署成为团队的习惯,因为它们是软件研发实践的基石。DevOps 的目标就是更快将软件交付给用户,而 CI/CD 实践将让这一切变为现实。
如果问 10 个 DevOps 团队的 CI/CD 实践,会得到 10 个不同答案。但以下几个方面都是大家一致推崇的:
只构建一次:不要为每个阶段创建一个新构建,这会带来不一致风险。在 CI/CD 流水线中,推荐使用同一个构建制品(与环境无关的构建);
简化测试:在测试覆盖率和性能之间取得平衡。如果花费很长时间才能出现测试结果,用户则会试图绕开这些流程;
快速失败:在 CI 侧,提交代码的研发人员需要尽快得知他们提交的代码是否有问题,以便还能在熟悉这些代码的时候快速回滚和修复。“快速失败” 理念帮助开发人员减少上下文切换,让 DevOps 专业人员更加快乐;
每天提交:代码提交越规律,DevOps 团队将能看到越多价值;
有问题就修复:CI/CD 让修复失败构建变得更加简单;
清空预生产环境:环境持续运行时间越长,越难追踪应用在环境上的配置变更和更新。在每次部署之间都清空预生产环境是好习惯;
始终自动化:不断调整 CI/CD 流水线以确保实现持持续自动化;
明确步骤:确保版本发布和回滚计划明确写进文档,并被整个团队理解;
保持安全:CI/CD 是一种左移,因此它提供了一个很好的机会,将安全集成到早期流程中;
反馈循环:确保整个团队有一个简单办法来接受(或者贡献)反馈。
CD(持续交付/部署)也值得深入研究一下它们的最佳实践,尽管风头总是被 CI 抢走了。以下是 CD 的最佳实践:
立即开始:不要等新平台,从现有的开始调整,让它们变得更快、更高效;
少即是多:最好的 CD 是用最少的工具完成的;
追踪正在发生的事情:Issue 和 Merge Request 可能会失控,但 Milestone 可以提供帮助的,例如在设置敏捷冲刺和发布时,Milestone 具有双重作用:帮助跟踪正在进行的所有事项;进行有计划的交付;
自动化部署变更:通过自动化简化用户验收测试和 staging 环境部署;
管理发布流水线:自动化一切;
建立监控:密切关注生产流程能够节约时间和金钱,还能够对业务侧提供关键数据;
启动持续部署:一旦启动持续交付,就把手从部署上拿开,通过自动化将变更部署到生产环境。
所谓流水线,其实只是一种描述部署新版本软件所涉及到的一系列步骤的方式。监控和自动化被引入到 CI/CD 中,用以改进应用程序开发流程,特别是在集成和测试阶段,以及软件交付和部署阶段。
一个典型的 CI/CD 流水线应具有这些元素:计划、分析、设计、构建、测试、发布、部署、验证、合规及维护。这些步骤都可以手动实现,但是 CI/CD 流水线的价值体现在自动化。
如果要微调 CI/CD 流水线,可以考虑通过以下几点来增强性能:
混合发布策略。金丝雀发布(或金丝雀部署)或许值得考虑。在金丝雀发布中,只有特定用户群体能看到新功能特性部署。
增加更多自动化测试,因为自动化测试用不嫌多。
持续做减法。更少的工具意味着更少的手动操作和步骤。如果 CI/CD 是 DevOps 平台的一部分,那么一切都应该在一个平台上。
将软件组件分析视为常规实践,以确保 DevOps 团队持续追踪重要的开源软件问题。
DevOps 团队可能不知道他们的 CI/CD 实践运行如何,除非能够衡量它们。指标在改进系统性能及帮助识别何处可以增加价值时,扮演了非常重要的角色,还为任何改进的影响提供了基准。
以下是一些衡量 CI/CD 是否成功的指标:
➤ 循环周期
指从开始编写代码到推出功能特性需要的时间。
为计算出循环周期平均时长,需衡量研发流程整个阶段。该指标提供总体开发时长以及过程瓶颈的洞察。
➤ 价值实现时间
指发布编写的代码需要多长时间。集成、测试、交付及部署应该需要几分钟到几小时才能完成测试周期。如果 CI/CD 流水线的构建需要数天才能完成,则无法实现价值,需要对整个流程进行调整。
➤ 持续运行时长
正常运行时长是对稳定性及可靠性的一种衡量,这是运维团队首要任务之一。
当 CI/CD 策略自动化时,运维负责人就可以将更多时间聚焦在系统稳定性上,而在工作流问题上花费更少时间。
➤ 错误率
应用程序错误率是研发过程中的一个既定事实。追踪错误率非常重要,因为错误率不仅能够指出质量问题,还可以指示连续的性能问题以及与正常运行时间有关问题。
如果持续运行时长和错误率都很高,说明开发团队和运维团队之间存在常见的 CI/CD 挑战。
➤ 基础设施成本
在云原生开发中,基础设施成本非常重要。如不加以控制,部署和管理一个 CI/CD 平台会带来巨大成本。为了确定它们如何定价,云厂商将考虑网络硬件、基础设施维护及人力成本。
➤ 团队留存率
众所周知:当开发人员或者任何一个人真切感受到自己的价值和被重视的时候,他们会留下来。
当团队默契协作,那么留存是必然结果。相反,开发者合作不顺畅、进展缓慢等,他们可能会感到不舒服。通过查看团队留存率,可以发现潜在问题。
当遵循最佳实践时,CI/CD 的好处会贯彻整个组织:
从 HR 到运维,团队能够更好的工作并达到最终目的;围绕 CI/CD 性能建立指标不仅可以提供有关开发的洞察,还可以延伸到业务的诸多方面;一个功能良好的 CI/CD 流水线能够改变 DevOps 团队的游戏规则。
以下是一些巨大的优势:
开发人员不是在修东西,而是在写代码。越少的工具和工具链意味着在工具维护上花更少时间,从而将更多时间用于在生产高质量软件。
代码即生产。不要让代码排队等待,而应该立马进入真实世界。这能让开发人员收到及时反馈的成就感。
开发人员可以专注于解决业务问题。简化的 CI/CD 流水线能够让开发者真正聚焦在重要的事情上,而不是让问题代码、繁琐的手动操作、生产问题等其他事项来分散注意力。
更容易创新。这是一个充满竞争的世界,组织需要所有可用的工具来勇立潮头。一个构建良好的 CI/CD 流程能够让软件研发更容易、更快和更安全,这也意味着 DevOps 团队有更多时间和精力去创新。
吸引并留下人才。人力市场的竞争激烈,DevOps 人才难以被打动。与其画大饼说 “我们很重视 DevOps 团队”,不如围绕 CI/CD 流程和技术来进行一些实际投资。
每一个人发挥所长。CI/CD流水线帮助研发、运维、安全以及测试各司其职,发挥所长。
请记住,CI/CD 的目标是更快、更好地将软件交付到客户手中,提高生产力。诀窍在于采用在企业内部行之有效的部署策略。以下是一些让 CI/CD 成功的策略:
频繁提交代码;
自动化构建流程;
并行运行测试,并构建一个部署流水线;
快速失败并且采取左移措施,为开发人员提供技能和工具,以便在不破坏整体流程的基础上实现加速;
使用能够快速获得反馈的 CI 工具。
在实施任何软件之前,关键是要确定业务驱动因素是什么,采用 CI/CD 也是如此,所有研发相关者都应该尽早参与实施过程。研发人员应该提供意见,因为他们将是产品的主要用户。
虽然这看起来有违直觉,因为 CI/CD 是以自动化方式加速软件交付的步伐,但是需要以缓慢而平稳的心态开始整个过程。
在集成过程中保持一致性很重要。执行单元测试、手动发版以及追踪指标。然后决定什么可以自动化、什么应该自动化。