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

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

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

相关文章
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
自动化测试的新篇章:利用AI提升软件质量
【8月更文挑战第27天】在软件开发的海洋中,自动化测试是确保航船不偏离航线的关键罗盘。随着人工智能(AI)技术的兴起,这艘航船正乘风破浪,以前所未有的速度前进。本文将探索如何通过AI技术优化自动化测试流程,不仅提高测试的效率和覆盖范围,而且增强测试用例的智能生成和结果分析能力。我们将从AI在自动化测试中的应用入手,深入探讨其对测试准确性和效率的影响,以及面临的挑战与未来的发展方向。
|
9天前
|
测试技术 持续交付 Python
自动化测试之美:打造高效的软件质量保障体系
【9月更文挑战第25天】在软件开发的海洋中,自动化测试是一艘能够引领我们高效航行的帆船。它不仅能帮助我们发现缺陷,更是一个持续集成和持续部署(CI/CD)过程中不可或缺的部分。本文将通过浅显易懂的语言和实际代码示例,引导读者理解自动化测试的价值,并学会如何实施它,从而提升软件的质量与开发效率。
28 4
|
9天前
|
敏捷开发 监控 测试技术
提升软件质量的利器:自动化测试的实践与反思
在软件开发的生命周期中,测试作为保障产品质量的重要环节,其重要性不言而喻。随着敏捷开发和持续集成等实践的普及,传统的手动测试方式已逐渐无法满足快速迭代的需求。因此,自动化测试作为一种提高测试效率和准确性的有效手段,正受到越来越多开发者的青睐。本文将深入探讨自动化测试的价值、实施步骤以及在实践中可能遇到的问题和解决方案,帮助读者更好地理解和应用自动化测试。
13 2
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
AI驱动的自动化测试:提升软件质量的未来之路
【9月更文挑战第3天】AI驱动的自动化测试是提升软件质量的未来之路。它借助AI技术的力量,实现了测试用例的智能生成、测试策略的优化、故障预测与定位等功能的自动化和智能化。随着技术的不断进步和应用场景的不断拓展,AI驱动的自动化测试将在未来发挥更加重要的作用,为软件开发和运维提供更加高效、准确和可靠的解决方案。
|
2月前
|
监控 数据管理 jenkins
深入理解与应用软件自动化测试框架
【8月更文挑战第30天】在现代软件开发周期中,自动化测试已成为提高测试效率、保证软件质量的关键步骤。本文将探讨自动化测试框架的设计与实现,重点放在如何根据不同项目需求选择合适的测试框架,以及如何有效地集成到现有的开发和测试流程中。通过分析几个流行的自动化测试工具,如Selenium、Appium和JUnit,我们将讨论它们的特点、优势以及可能面临的挑战。此外,文章还将介绍一些最佳实践,帮助读者构建稳定且易于维护的自动化测试环境。
|
2月前
|
前端开发 Java UED
JSF遇上Material Design:一场视觉革命,如何让传统Java Web应用焕发新生?
【8月更文挑战第31天】在当前的Web开发领域,用户体验和界面美观性至关重要。Google推出的Material Design凭借其独特的动画、鲜艳的颜色和简洁的布局广受好评。将其应用于JavaServer Faces(JSF)项目,能显著提升应用的现代感和用户交互体验。本文介绍如何通过PrimeFaces等组件库在JSF应用中实现Material Design风格,包括添加依赖、使用组件及响应式布局等步骤,为用户提供美观且功能丰富的界面。
34 0
|
2月前
|
前端开发 Devops 持续交付
【前端自动化新高度】Angular与Azure DevOps完美结合:从零构建持续集成与持续部署的全自动流水线,提升开发效率与软件交付质量!
【8月更文挑战第31天】Angular作为领先的前端框架,以强大功能和灵活性深受开发者喜爱。Azure DevOps提供一站式DevOps服务,涵盖源码管理、持续集成(CI)及持续部署(CD)。本文将指导你如何在Azure DevOps中搭建Angular项目的CI/CD流程,并通过具体示例代码展示整个过程。首先,我们将创建一个Angular项目并初始化Git仓库;然后,在Azure DevOps中设置CI流水线,定义YAML文件以自动化构建和部署流程。最终实现每次提交代码后自动构建并部署至Azure Web App,极大提升了开发效率和软件交付速度,使团队更专注于创新。
19 0
|
29天前
|
运维 Ubuntu Devops
自动化运维工具的魅力:Ansible入门
【9月更文挑战第5天】在快速变化的IT世界里,自动化运维不再是可选项,而是必需品。Ansible,一款简单却强大的自动化工具,正成为众多DevOps工程师的首选。本文将带你了解Ansible的基本概念、安装步骤以及如何编写简单的Playbook,从而开启你的自动化之旅。
67 36
|
6天前
|
机器学习/深度学习 运维 Cloud Native
构建高效运维体系:从自动化到智能化的演进之路
在当今数字化时代,运维作为信息技术的重要支柱,其效率与创新能力直接关系到企业信息系统的稳定性和业务连续性。本文将探讨如何通过技术手段,实现运维从传统手工操作向自动化、智能化的转变,进而构建一个高效、可靠的运维体系。我们将从自动化工具的应用开始,逐步深入到智能运维的实践,最终展望云原生架构下的运维未来趋势。
|
9天前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进之路
在当今数字化时代,运维作为保障企业IT系统稳定运行的关键环节,正经历着前所未有的变革。本文将探讨如何通过实施自动化和引入智能化技术,构建一个更加高效、可靠的运维体系,以应对日益复杂的业务需求和技术挑战。
22 1
下一篇
无影云桌面