分阶段部署

阶段或层级是指软件部署并执行的环境。典型的阶段包括开发、测试、预发布(或预生产)和生产环境。通常,预发布或预生产环境是生产环境的完整镜像,有时通过负载均衡切换两个环境来实现零停机部署。通常,越接近生产的阶段需要在部署之前获得手动批准。

如果公司使用功能标志(请参考第10章《功能标志与功能生命周期》)并且实践持续交付(CD),通常阶段的数量会减少。我们可以谈论基于环的部署或扩展单元。基于环的部署的理念是,您在不同的生产环中拥有客户。您将更新部署到一个环,并自动监控系统,检查是否有意外异常或不寻常的指标,例如 CPU 或内存使用情况。此外,您还可以在生产环境中运行自动化测试。如果没有错误,发布过程会继续进行,并部署到下一个环。在讨论基于环的部署时,通常意味着不涉及手动批准。然而,也可以在环与环之间进行手动批准。

在 GitHub 中,您可以使用 Environments 执行阶段部署和基于环的部署。您可以在代码库的设置中查看、配置或创建新的环境(路径:Settings | Environments)。

对于每个环境,您可以定义以下内容:

  • 所需审核者:最多包括五个用户或团队作为手动审批人。在执行部署之前,必须有其中一位审批人批准。

  • 等待计时器:指的是部署执行之前的宽限期。最大时间为 43,200 分钟(即 30 天)。此外,如果在前一个阶段发现错误,您可以使用 API 取消部署。

  • 部署分支:在此,您可以限制哪些分支可以部署到该环境。您可以选择所有受保护分支或定义自己的模式。该模式可以包括通配符(例如 release/*)。

  • 环境机密:环境中的机密会覆盖来自代码库或组织范围的机密。这些机密只有在所需审核者批准部署后才会加载。

该配置类似于图 9.1 所示:

image 2024 12 27 13 31 40 391
Figure 1. 图 9.1 – 在 GitHub 中配置环境

在工作流文件中,您可以在作业级别指定环境:

jobs:
  deployment:
    runs-on: ubuntu-latest
    environment: prod

此外,您还可以指定一个 URL,该 URL 会显示在概述页面上:

jobs:
  deployment:
    runs-on: ubuntu-latest
    environment:
      name: production
      url: https://writeabout.net

通过 needs 关键字,您可以定义作业之间的依赖关系,从而定义环境之间的依赖关系(见图 9.2):

image 2024 12 27 13 32 01 257
Figure 2. 图 9.2 – 阶段部署的概览页面

环境的状态还会显示在代码库的主页上(见图 9.3):

image 2024 12 27 13 32 20 268
Figure 3. 图 9.3 – 主页上的环境

如果您想体验环境配置,您可以在 https://github.com/wulfland/AccelerateDevOps/ 的 fork 中运行 Staged Deployment 工作流,并将自己添加为某些阶段的所需审核者。