菜单

部署自动化

相关源文件

本文档涵盖了暂存和生产环境的自动化部署过程。部署自动化系统使用 HashiCorp Nomad 协调容器部署,管理 Docker 镜像的构建和推送,并强制执行生产发布的业务逻辑约束。

有关创建部署工件的构建过程的信息,请参阅构建过程。有关底层容器编排的详细信息,请参阅Nomad 编排

部署类型概览

系统支持两种不同的部署工作流

部署类型目标环境触发器自动化水平
分支部署预发布任意分支推送全自动化
生产部署生产手动审批半自动化带安全检查

两种部署类型都依赖于相同的基础设施组件,但实现了不同的安全机制和部署策略。

分支部署流程

分支部署工作流

分支部署工作流

来源:.buildkite/scripts/deploy_branch.sh1-84

分支部署过程从 deploy_branch.sh 脚本开始,该脚本处理将功能分支部署到暂存环境的完整生命周期。该过程首先使用 generate_nginx_tag 函数生成唯一的 Nginx 镜像标签 .buildkite/scripts/deploy_branch.sh14-26,该函数根据要部署的特定路径的 Git 提交历史创建标签。

镜像管理和标记

系统对 Docker 镜像使用复杂的标记策略

分支部署的镜像标记策略

来源:.buildkite/scripts/deploy_branch.sh28-32 .buildkite/scripts/deploy_branch.sh69

分支部署系统创建两种主要镜像类型

  • Web 镜像:主应用程序的标签为 staging-{12-char-commit-hash}
  • Nginx 镜像:使用 generate_nginx_tag 函数进行标记,用于分支特定的反向代理配置

Docker 镜像构建和推送逻辑

部署脚本实现了 Docker 操作的强大错误处理

Docker 推送重试逻辑

来源:.buildkite/scripts/deploy_branch.sh34-55

生产部署流程

生产安全机制

生产部署实施关键业务逻辑保护

生产部署安全流程

来源:.buildkite/scripts/deploy_production.sh10-15 .buildkite/scripts/deploy_production.sh24-28

生产部署系统强制执行一项关键业务规则,即在 UTC 10:00-12:00 付款处理窗口期间阻止部署 .buildkite/scripts/deploy_production.sh11-14。这可以防止在财务操作期间可能出现的服务中断。

生产镜像验证

在继续部署之前,系统会验证所需的生产镜像是否存在

验证步骤命令目的
镜像存在性检查docker manifest inspect $WEB_REPO:$PRODUCTION_TAG验证生产镜像是否可用
标签格式production-{12-char-commit-hash}确保一致的生产标记
注册表路径$ECR_REGISTRY/gumroad/web验证 ECR 仓库访问

来源:.buildkite/scripts/deploy_production.sh25-28

生产部署执行

生产部署过程最终通过 bin/deploy 脚本执行,并带有 DEPLOYMENT_FROM_CI=true 环境变量 .buildkite/scripts/deploy_production.sh49。这区分了 CI 驱动的部署和手动部署,并可能在部署脚本中触发不同的行为。

基础设施设置和依赖

Nomad 安装过程

两种部署类型都需要 HashiCorp Nomad 进行容器编排

Nomad 安装工作流

来源:.buildkite/scripts/install_nomad.sh10-23

系统使用特定 Nomad 版本(0.8.3)以确保部署一致性 .buildkite/scripts/install_nomad.sh11。安装过程包括正确的权限设置和版本验证。

秘密和配置管理

两种部署过程都依赖于外部配置

组件来源目的
秘密copy_secrets.sh 脚本注入敏感配置
Nomad 配置nomad/staging/nomad/production/环境特定编排
证书nomad/certs/ 和环境特定证书目录TLS/SSL 配置

来源:.buildkite/scripts/deploy_branch.sh65-66 .buildkite/scripts/deploy_production.sh35-36

部署自动化创建所需的目录结构,并设置适当的所有权

  • 分支部署的 nomad/staging/certs
  • 生产部署的 nomad/production/certs
  • 所有权设置为 buildkite-agent:buildkite-agent 以进行适当的访问控制

来源:.buildkite/scripts/deploy_branch.sh74-77 .buildkite/scripts/deploy_production.sh39-42

集成点

部署自动化与多个外部系统集成

部署系统集成图

来源:.buildkite/scripts/deploy_branch.sh61-66 .buildkite/scripts/deploy_production.sh31-36

部署自动化充当 CI/CD 流水线与运行时基础设施之间的桥梁,协调跨多个环境的镜像管理、配置部署和服务编排。