「译文」软件自动化发布管理的三个步骤

简介: 「译文」软件自动化发布管理的三个步骤

👉️URL: https://thenewstack.io/3-steps-for-automating-software-release-management/

Author: Wolfgang Heider

📝Description:

The speed of release cycles now results in a need to automate as much as possible, to ensure organizations can compete in this fast changing environment.

“发布还是不发布?” 是发布经理的日常工作。 这是许多开发或运维软件的人所面临的问题,并且与部署新软件版本的风险直接相关。 这是我个人在发布管理领域工作时每天都要处理的事情,作为一名产品所有者,我需要设置持续交付、实施 DevOps 范式并使其他公司变得更加敏捷。

发布经理的工作很艰巨,他们需要对不完整的数据做出决策–根据组织的不同,可能有多个角色(如首席软件工程师、基础架构运维,有时还有公司的法律权威)参与发布或不发布软件的决策,涉及的人员多达数十人或数百人。

现在,随着自动化的不断发展,这些角色都在发生变化。 没有时间手动收集决策所需的所有事实。 已经过渡到敏捷软件开发、DevOps、持续交付或测试自动化的组织都会强制执行任何决策的自动化 - 或者至少需要自动化来提供关于是否按下发布按钮的所有事实。 发布流程的自动化可以提高发布频率和渐进式交付策略,同时在预生产和生产阶段并行运行多个版本。

发布周期的增长速度导致了对尽可能多地自动化的需求,以确保组织能够在这个快速变化的动态环境中竞争。 根据今年发布的 云原生计算基金会调查 显示,每日、每周和临时发布的数量大幅增加:

对于大多数组织来说,软件产品生命周期涉及的工具链通常超过 10 种不同的工具,有助于实现自动化。 这不仅仅是工具的普及和自动化程度的提高; 每个版本的批准和决策过程的数量也会增加。 手动收集数据的工作成为了发布自动化和自动化软件生命周期的瓶颈和致命弱点。

自动化基于发布风险的任何决策制定不仅仅是规则集的实现和自动化工程师的一些脚本编写。 它还需要领域知识来考虑软件提供的服务、设置的法律服务级别协议(SLA)以及任何软件版本如何影响 SLA。

软件版本感知和影响分析的三个步骤

当评估新软件发布的风险时,会出现多个问题,并且会努力使此过程更加透明和可测量。 以下是我作为发布管理员使用的典型检查表:

第一步:我们是否有新版本? 是否已通过 stage 环境?

  • 我们目前有哪些新版本正在开发中?
  • 我们的交付流程中的特定版本进展如何?
  • 新发行版的变更日志是什么?
  • 我们可以预期哪些已知的错误?
  • 我们在测试结果和软件质量方面是否安全,或者我们是否有任何 block 点?

第二步:当前在生产中运行的软件的状态是什么?

  • 当前版本在生产环境中提供了多少可用性?
  • 当前版本在生产环境中的性能如何?
  • 当前版本在生产中消耗多少资源?
  • 我们在生产中是否有正在进行的发布和部署; 例如,是否有当前从以前版本重定向到新版本的负载?
  • 新版本在可用性、性能和资源消耗方面的行为如何?

第三步:发布可能产生什么影响?

在进行任何影响分析之前,需要回答上述问题。有关新版本和当前生产状态的答案有助于告知以下内容:

  • 新版本将对资源消耗产生什么影响?
  • 新版本将对性能产生什么影响?
  • 新版本将对可用性产生什么影响?
  • 从营销的角度来看,这次发布会对我们的品牌产生负面影响吗?

定义发布的影响并尝试对其进行量化以确保公平和准确的决策是发布经理的全职工作。通常,发布压力会导致发布经理根据不完整的数据或在其无法控制的业务条件的胁迫下做出“发布 / 不发布”的决定。

定义和评估用于生产监控的 SLO

管理发布新软件版本的风险与生产中当前版本的可靠性密切相关。Google 发布的站点可靠性工程 (SRE) 资源 涵盖了有关软件服务可靠性的许多操作观点,包括 SLI 和 SLO。SLI 和 SLO 为 SLA 提供了基础。

SLO 定义示例

对于任何软件版本的方案,都会出现问题:

  • 由于 SLO 故障而违反任一客户的 SLA 的风险是什么?
  • 生产中任何 SLO 的当前状态如何?
  • 在违反 SLO 之前,我还剩下多少错误预算,失败的请求,缓慢的加载时间或停机时间分钟数(或“错误预算”)?
  • 新软件版本对我的 SLI/SLO 有何影响?

SLO 的评估不仅限于生产,还可以应用于预生产或任何部署场景中的质量门禁。Keptn 是发布自动化的开源项目,它已经提供了基于 SLO 定义的 自动化质量门禁 - 生成用于 SLO 的指标并根据任何目标目标进行评估。

在生产中的新软件到达客户之前对其进行 SLO 评估

在决定发布或不发布之前,必须回答有关生产中 SLO 的所有信息和所有问题,以及有关新软件版本在定义 SLO 方面的行为数据。同样重要的是要考虑发布的频率,以及因此手动收集数据以部署这些版本所需的工作量增加。

在不断变化的 DevOps 和持续交付世界中,如果自动化不应用于为任何数据收集和决策提供答案和建议,则发布管理以及发布经理的角色可能会变得繁琐,并成为软件产品生命周期中的瓶颈。评估新软件发布的风险作为任何发布决策的基础,涉及将有关生产中 SLO 的当前状态和对 SLO 结果的潜在发布影响的答案结合起来。了解新软件版本的状态、内容和进度、生产 SLO 状态以及新软件版本的 SLO 评估结果(无需为每个版本手动操作)使发布经理的工作更加轻松。

例如,如果生产中没有剩余的错误预算,那么一个简单的下一步可能是运维团队定义任何进一步发布的回退 - 当然可以自动化。但是,即使生产中还剩下一些错误预算,如果较新版本在 SLO 评估方面表现较差(例如,与当前在生产中运行的版本相比,性能相对下降,并且剩余错误预算最小),也应该自动停止发布。

需要评估在发布过程中 stage 环境的新软件版本以及已根据 SLO 评估进行测试的测试运行分析结果。为生产环境提供的 SLO 定义(例如,对于所有请求的 95%,特定服务请求需要在 600 毫秒内返回),可以在测试阶段进行评估,在测试阶段,可以及早发现性能下降。

因此,甚至可以在软件到达生产和客户之前检测到 SLO 违规,从而为新软件版本提供 SLO 违规的根原分析。在预生产中建立监控定义可以安全可靠地将版本从 stage 环境移动到生产阶段,同时对任何 SLO 产生负面影响的风险最小。

相关文章
|
8天前
|
测试技术 开发者 Python
自动化测试之美:从零构建你的软件质量防线
【10月更文挑战第34天】在数字化时代的浪潮中,软件成为我们生活和工作不可或缺的一部分。然而,随着软件复杂性的增加,如何保证其质量和稳定性成为开发者面临的一大挑战。自动化测试,作为现代软件开发过程中的关键实践,不仅提高了测试效率,还确保了软件产品的质量。本文将深入浅出地介绍自动化测试的概念、重要性以及实施步骤,带领读者从零基础开始,一步步构建起属于自己的软件质量防线。通过具体实例,我们将探索如何有效地设计和执行自动化测试脚本,最终实现软件开发流程的优化和产品质量的提升。无论你是软件开发新手,还是希望提高项目质量的资深开发者,这篇文章都将为你提供宝贵的指导和启示。
|
7天前
|
机器学习/深度学习 人工智能 自然语言处理
自动化测试的新篇章:利用AI提升软件质量
【10月更文挑战第35天】在软件开发的海洋中,自动化测试犹如一艘救生艇,它帮助团队确保产品质量,同时减少人为错误。本文将探索如何通过集成人工智能(AI)技术,使自动化测试更加智能化,从而提升软件测试的效率和准确性。我们将从AI在测试用例生成、测试执行和结果分析中的应用出发,深入讨论AI如何重塑软件测试领域,并配以实际代码示例来说明这些概念。
34 3
|
22天前
|
敏捷开发 监控 jenkins
自动化测试之美:打造高效的软件质量保障体系
【10月更文挑战第20天】在软件开发的海洋中,自动化测试如同一艘精准的导航船,引领项目避开错误的礁石,驶向质量的彼岸。本文将扬帆起航,探索如何构建和实施一个高效的自动化测试体系,确保软件产品的稳定性和可靠性。我们将从测试策略的制定、工具的选择、脚本的编写,到持续集成的实施,一步步描绘出自动化测试的蓝图,让读者能够掌握这一技术的关键要素,并在自己的项目中加以应用。
28 5
|
22天前
|
Java 测试技术 持续交付
探索自动化测试的奥秘:提升软件质量的关键
【10月更文挑战第20天】 在当今快速发展的软件行业中,自动化测试已成为确保产品质量和加速开发周期的重要工具。本文将深入探讨自动化测试的核心概念、实施策略及其对软件开发生命周期的影响,旨在为读者提供一种全面理解自动化测试的视角,并展示如何有效地将其应用于实际项目中以提高软件质量和效率。
18 2
|
1月前
|
测试技术 数据安全/隐私保护 开发者
自动化测试的奥秘:如何用Selenium和Python提升软件质量
【9月更文挑战第35天】在软件开发的海洋中,自动化测试是那艘能引领我们穿越波涛的帆船。本文将揭开自动化测试的神秘面纱,以Selenium和Python为工具,展示如何构建一个简单而强大的自动化测试框架。我们将从基础出发,逐步深入到高级应用,让读者能够理解并实现自动化测试脚本,从而提升软件的质量与可靠性。
|
2月前
|
测试技术 持续交付 Python
自动化测试之美:打造高效的软件质量保障体系
【9月更文挑战第25天】在软件开发的海洋中,自动化测试是一艘能够引领我们高效航行的帆船。它不仅能帮助我们发现缺陷,更是一个持续集成和持续部署(CI/CD)过程中不可或缺的部分。本文将通过浅显易懂的语言和实际代码示例,引导读者理解自动化测试的价值,并学会如何实施它,从而提升软件的质量与开发效率。
41 4
|
2月前
|
敏捷开发 监控 测试技术
提升软件质量的利器:自动化测试的实践与反思
在软件开发的生命周期中,测试作为保障产品质量的重要环节,其重要性不言而喻。随着敏捷开发和持续集成等实践的普及,传统的手动测试方式已逐渐无法满足快速迭代的需求。因此,自动化测试作为一种提高测试效率和准确性的有效手段,正受到越来越多开发者的青睐。本文将深入探讨自动化测试的价值、实施步骤以及在实践中可能遇到的问题和解决方案,帮助读者更好地理解和应用自动化测试。
40 2
|
1月前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进
本文探讨了如何通过自动化和智能化手段,提升IT运维效率与质量。首先介绍了自动化在简化操作、减少错误中的作用;然后阐述了智能化技术如AI在预测故障、优化资源中的应用;最后讨论了如何构建一个既自动化又智能的运维体系,以实现高效、稳定和安全的IT环境。
63 4
|
1月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
52 4
|
4天前
|
机器学习/深度学习 数据采集 人工智能
智能运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的兴起背景、核心组件及其在现代IT运维中的应用。通过对比传统运维模式,阐述了AIOps如何利用机器学习、大数据分析等技术,实现故障预测、根因分析、自动化修复等功能,从而提升系统稳定性和运维效率。文章还深入分析了实施AIOps面临的挑战与解决方案,并展望了其未来发展趋势。 ####