菜单

构建流程

相关源文件

构建流程包含 CI/CD 流水线中的 Docker 镜像创建、资源编译和构件管理。该系统创建了具有特定环境配置的多个 Docker 镜像,并为暂存和生产环境部署编译前端资源。有关部署自动化和编排的信息,请参阅部署自动化。有关 Docker 配置的详细信息,请参阅Docker 配置

构建流水线架构

构建流程包含三个主要阶段,用于创建分层 Docker 镜像和编译特定环境的资源。

源文件:.buildkite/scripts/build_base.sh1-37 .buildkite/scripts/build_web.sh1-81 .buildkite/scripts/compile_assets.sh1-93

Docker 镜像构建过程

构建流程创建了一系列分层的 Docker 镜像,从基础镜像开始,然后添加特定应用程序的组件。

基础镜像构建

build_base.sh 脚本管理包含通用依赖项的基础 Docker 镜像。

组件目的实现
Ruby 基础镜像来自 Docker Hub 的基础层ruby:$(cat .ruby-version)-slim-bullseye
基础镜像标签基于内容的版本控制docker/base/generate_tag_for_web_base.sh
ECR 注册表私有镜像存储${ECR_REGISTRY}/gumroad/web_base
构建缓存避免重复构建清单检查

基础镜像构建包含重试逻辑和存在性检查,以优化构建时间 .buildkite/scripts/build_base.sh15-36

Web应用程序构建

主应用程序镜像基于基础镜像构建,包含应用程序代码和配置。

Web 构建流程从 git 提交 SHA 的前 12 个字符生成标签 .buildkite/scripts/build_web.sh19,并包含一个独立的 nginx 镜像来提供静态内容 .buildkite/scripts/build_web.sh62-66

源文件:.buildkite/scripts/build_base.sh10-36 .buildkite/scripts/build_web.sh10-30 .buildkite/scripts/build_web.sh47-80

资源编译过程

资源编译创建了包含预编译前端资源的特定环境镜像,并利用并行处理提高效率。

并行资源构建

编译过程使用 BUILDKITE_PARALLEL_JOB 同时构建暂存和生产资源。

并行作业环境分支条件Make 目标
0预发布!= "main"make build_staging
1生产!~ ^deploy-.*make build_production

环境特定配置

每个环境都使用不同的配置和凭据。

资源编译包含用于 S3 资源上传的 AWS 凭据,并使用 COMPOSE_PROJECT_NAME 进行容器隔离 .buildkite/scripts/compile_assets.sh24

源文件:.buildkite/scripts/compile_assets.sh62-76 .buildkite/scripts/compile_assets.sh78-92

镜像注册表和标签策略

构建系统采用结构化的标签策略进行镜像管理和部署协调。

标签生成方法

镜像类型标签来源示例
基础镜像内容哈希generate_tag_for_web_base.sh 的 SHA
Web 镜像Git 提交BUILDKITE_COMMIT 的前 12 个字符
Nginx 镜像文件更改影响 public/docker/nginx/ 的 Git 提交
环境镜像Web 标签 + 环境staging-abc123def456production-abc123def456

注册表操作

所有镜像都存储在 AWS ECR 中,并为推送操作提供重试逻辑。

nginx 镜像标签生成使用 generate_nginx_tag() 函数,从 public/ 目录和 docker/nginx/ 配置中的文件创建基于内容的标签 .buildkite/scripts/build_web.sh47-59

源文件:.buildkite/scripts/build_base.sh22-34 .buildkite/scripts/build_web.sh34-45 .buildkite/scripts/compile_assets.sh41-55