本文档描述了 Base Node 仓库中使用的持续集成和持续部署(CI/CD)工作流。这些工作流自动化了 Base Node 支持的各种执行客户端的 Docker 镜像的测试、构建和发布。
有关这些工作流构建和发布的 Docker 基础架构的信息,请参阅 Docker 基础架构。
Base Node 仓库采用了两种主要 GitHub Actions 工作流:
这些工作流确保了所有支持的执行客户端(Geth、Reth 和 Nethermind)的 Docker 镜像都能在 amd64 和 arm64 架构上得到正确测试和发布。
来源:.github/workflows/pr.yml1-85 .github/workflows/docker.yml1-17
PR 工作流在每次拉取请求时触发,也可手动触发。其主要目的是在合并更改之前,验证所有执行客户端和平台架构的 Docker 镜像是否能够成功构建。
PR 工作流包含三个并行作业:
每个作业都在包含 amd64 和 arm64 架构的平台矩阵上执行。
来源:.github/workflows/pr.yml3-84
对于每个执行客户端,工作流会检出代码,设置 Docker Buildx,然后构建 Docker 镜像,但不将其推送到注册表。
Reth 构建包含特定的优化功能标志,amd64 (jemalloc,asm-keccak,optimism) 和 arm64 (jemalloc,optimism) 使用不同的设置。
Job: geth → Build with geth/Dockerfile
Job: reth → Build with reth/Dockerfile + features
Job: nethermind → Build with nethermind/Dockerfile
来源:.github/workflows/pr.yml27-32 .github/workflows/pr.yml53-60 .github/workflows/pr.yml79-84
Docker 构建与推送工作流负责将官方 Docker 镜像构建、标记并发布到 GitHub Container Registry (GHCR)。它在以下情况触发:
工作流为 Docker 镜像使用以下命名约定:
| 执行客户端 | 镜像名称 |
|---|---|
| Geth | ghcr.io/base/node-geth |
| Reth | ghcr.io/base/node-reth |
| Nethermind | ghcr.io/base/node-nethermind |
为向后兼容,Geth 镜像也作为 ghcr.io/base/node 发布。
来源:.github/workflows/docker.yml10-16
Docker 工作流包含六个作业:
来源:.github/workflows/docker.yml18-323
每个构建作业:
工作流使用 Docker Buildx 同时构建不同平台的镜像,并通过摘要将其推送到注册表。
来源:.github/workflows/docker.yml32-82 .github/workflows/docker.yml94-141 .github/workflows/docker.yml156-201
在构建并推送完所有特定架构的镜像后,合并作业会:
此过程确保当用户拉取镜像而不指定架构时,他们能获得适合其平台的镜像。
来源:.github/workflows/docker.yml204-323
Base Node 仓库中的 CI/CD 工作流与系统的各个组件紧密集成。它们确保所有支持的执行客户端的 Docker 镜像都能得到正确的构建、测试和发布。
来源:.github/workflows/pr.yml1-85 .github/workflows/docker.yml1-324
当 Base Node 发布新版本时,发布流程通过创建标签来触发 Docker 构建与推送工作流。
Docker 构建与推送工作流配置为在以“v”开头的标签(例如 v1.0.0)上触发。当推送此类标签时,工作流会:
这样可以确保用户能够使用版本标签拉取特定版本的 Base Node 镜像。
来源:.github/workflows/docker.yml3-8 .github/workflows/docker.yml41-46
对于贡献 Base Node 仓库的开发人员来说,理解 CI/CD 工作流对于确保更改的顺利集成至关重要。
提交拉取请求时
修改 CI/CD 工作流时:
有关更详细的贡献指南,请参阅 贡献指南。
来源:.github/workflows/pr.yml5 .github/workflows/docker.yml44-45