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

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

👉️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 产生负面影响的风险最小。

相关文章
|
1月前
|
测试技术 开发者 Python
自动化测试之美:从零构建你的软件质量防线
【10月更文挑战第34天】在数字化时代的浪潮中,软件成为我们生活和工作不可或缺的一部分。然而,随着软件复杂性的增加,如何保证其质量和稳定性成为开发者面临的一大挑战。自动化测试,作为现代软件开发过程中的关键实践,不仅提高了测试效率,还确保了软件产品的质量。本文将深入浅出地介绍自动化测试的概念、重要性以及实施步骤,带领读者从零基础开始,一步步构建起属于自己的软件质量防线。通过具体实例,我们将探索如何有效地设计和执行自动化测试脚本,最终实现软件开发流程的优化和产品质量的提升。无论你是软件开发新手,还是希望提高项目质量的资深开发者,这篇文章都将为你提供宝贵的指导和启示。
|
12天前
|
缓存 监控 安全
公司电脑监控软件的 Gradle 构建自动化优势
在数字化办公环境中,公司电脑监控软件面临代码更新频繁、依赖管理和构建复杂等挑战。Gradle 构建自动化工具以其强大的依赖管理、灵活的构建脚本定制及高效的构建缓存与增量构建特性,显著提升了软件开发效率和质量,支持软件的持续更新与优化,满足企业对员工电脑使用情况的监控与管理需求。
25 3
|
22天前
|
运维 jenkins Java
Jenkins 自动化局域网管控软件构建与部署流程
在企业局域网管理中,Jenkins 作为自动化工具,通过配置源码管理、构建及部署步骤,实现了高效、稳定的软件开发与部署流程,显著提升局域网管控软件的开发与运维效率。
39 5
|
27天前
|
测试技术 持续交付
探索自动化测试在软件质量保证中的关键作用
本文深入探讨了自动化测试在现代软件开发生命周期中的重要性,以及它是如何成为确保软件产品质量的不可或缺的一环。通过分析自动化测试的优势、挑战和最佳实践,本文旨在为读者提供对自动化测试全面而深刻的理解,从而帮助他们在实际工作中更有效地应用自动化测试策略。
31 2
|
1月前
|
jenkins 测试技术 持续交付
自动化测试框架的构建与优化:提升软件交付效率的关键####
本文深入探讨了自动化测试框架的核心价值,通过对比传统手工测试方法的局限性,揭示了自动化测试在现代软件开发生命周期中的重要性。不同于常规摘要仅概述内容,本部分强调了自动化测试如何显著提高测试覆盖率、缩短测试周期、降低人力成本,并促进持续集成/持续部署(CI/CD)流程的实施,最终实现软件质量和开发效率的双重飞跃。通过具体案例分析,展示了从零开始构建自动化测试框架的策略与最佳实践,包括选择合适的工具、设计高效的测试用例结构、以及如何进行性能调优等关键步骤。此外,还讨论了在实施过程中可能遇到的挑战及应对策略,为读者提供了一套可操作的优化指南。 ####
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
自动化测试的新篇章:利用AI提升软件质量
【10月更文挑战第35天】在软件开发的海洋中,自动化测试犹如一艘救生艇,它帮助团队确保产品质量,同时减少人为错误。本文将探索如何通过集成人工智能(AI)技术,使自动化测试更加智能化,从而提升软件测试的效率和准确性。我们将从AI在测试用例生成、测试执行和结果分析中的应用出发,深入讨论AI如何重塑软件测试领域,并配以实际代码示例来说明这些概念。
59 3
|
1月前
|
监控 网络协议 安全
员工网络监控软件:PowerShell 在网络监控自动化中的应用
在数字化办公环境中,企业对员工网络活动的监控需求日益增长。PowerShell 作为一种强大的脚本语言,能够有效实现员工网络监控自动化。本文介绍了如何使用 PowerShell 获取网络连接信息、监控特定网址的访问情况,并生成自动化报告,帮助企业高效管理员工网络活动,确保网络安全和合规性。
48 0
|
2月前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进
本文探讨了如何通过自动化和智能化手段,提升IT运维效率与质量。首先介绍了自动化在简化操作、减少错误中的作用;然后阐述了智能化技术如AI在预测故障、优化资源中的应用;最后讨论了如何构建一个既自动化又智能的运维体系,以实现高效、稳定和安全的IT环境。
80 4
|
2月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
66 4
|
25天前
|
机器学习/深度学习 运维 监控
智能化运维:从自动化到AIOps的演进之路####
本文深入探讨了IT运维领域如何由传统手工操作逐步迈向高度自动化,并进一步向智能化运维(AIOps)转型的过程。不同于常规摘要仅概述内容要点,本摘要将直接引入一个核心观点:随着云计算、大数据及人工智能技术的飞速发展,智能化运维已成为提升企业IT系统稳定性与效率的关键驱动力。文章详细阐述了自动化工具的应用现状、面临的挑战以及AIOps如何通过预测性分析和智能决策支持,实现运维工作的质变,引领读者思考未来运维模式的发展趋势。 ####