本文档介绍了 go-ethereum 项目的构建系统,包括如何从源代码构建、CI 流水线、发布流程和打包机制。构建系统旨在支持多种平台、架构和构建配置,使开发人员能够为各种部署场景编译代码库。
Go Ethereum 构建系统主要使用 Go 的原生构建工具,并结合自定义构建脚本来自动化复杂任务。构建系统支持:
来源:build/ci.go42-176 Makefile1-57 .travis.yml1-115 appveyor.yml1-59
go-ethereum 项目主要依赖以下构建工具:
开发中可能需要额外的工具:
来源:README.md16-26 build/ci.go179-227 Makefile41-48
Makefile 中的 devtools 目标会安装所需的开发工具。
make devtools
这会安装 stringer、gencodec 和 abigen 等工具,这些工具在构建过程中用于代码生成。
Makefile 提供了常用构建操作的便捷目标:
| 目标 | 描述 |
|---|---|
make geth | 仅构建 geth 可执行文件 |
make all | 构建所有包和可执行文件 |
make test | 运行测试套件 |
make lint | 运行 Linter |
make fmt | 格式化代码 |
make clean | 清理构建产物 |
来源:Makefile5-37
您也可以直接使用 Go 命令:
go run build/ci.go install ./cmd/geth
这会执行 build/ci.go 中的构建脚本来构建和安装 geth 可执行文件。
构建系统支持各种标志来控制二进制文件的构建方式。
构建系统使用多个构建标签来控制功能的包含。
urfave_cli_no_docs:禁用 CLI markdown 文档生成ckzg:启用与 CKZG 加密库的链接integrationtests:启用集成测试来源:build/ci.go197-202 build/ci.go300-306
构建系统支持为不同的目标架构和操作系统进行编译。
可以通过指定目标架构进行交叉编译。
go run build/ci.go install --arch arm64 --cc aarch64-linux-gnu-gcc ./cmd/geth
来源:build/ci.go179-227 .travis.yml36-57
go-ethereum 项目使用多种 CI 系统来确保代码质量和构建可靠性。
Travis CI 用于:
AppVeyor 用于:
构建系统可以创建多种类型的发行包:
来源:build/ci.go563-601 build/ci.go739-781
发行包使用以下方式进行签名:
当存在包含签名密钥的适当环境变量时,签名过程会在 CI 构建过程中自动进行。
go-ethereum 项目提供了 Docker 镜像作为替代部署方法。
Docker 镜像分两个阶段构建:
Dockerfile 定义了此过程,并且生成的镜像仅包含 geth 可执行文件和必要的证书。
来源: Dockerfile1-34 Dockerfile.alltools1-33
构建系统支持为多种架构创建 Docker 镜像
这些镜像在 CI 过程中构建并推送到 Docker Hub。
来源: .travis.yml22
构建系统包含全面的测试能力
go run build/ci.go test [packages]
测试功能包括
来源: build/ci.go274-329 .golangci.yml1-16
构建系统集成代码质量检查,以维护代码质量
go run build/ci.go lint
这会运行 golangci-lint 并使用项目特定的配置。
来源: build/ci.go429-471 .golangci.yml1-16
为了初始化区块链,构建系统包含了处理创世区块创建和验证的工具
geth init [genesis.json]
此命令使用指定的创世配置初始化一个新区块链。
来源: cmd/geth/chaincmd.go206-256 core/genesis.go279-370
构建过程产生以下主要输出
| 输出 | 描述 |
|---|---|
geth | 主要的以太坊客户端可执行文件 |
abigen | 合约绑定生成器 |
clef | 外部签名工具 |
evm | EVM 执行工具 |
rlpdump | RLP 数据格式解码器 |
所有可执行文件默认放置在 build/bin 目录中。
来源: build/ci.go66-81 README.md36-45
构建系统响应多个环境变量
| 可变 | 目的 |
|---|---|
GOPATH | Go 工作区路径 |
GOROOT | Go 安装路径 |
CC | 要使用的 C 编译器 |
GOOS | 目标操作系统 |
GOARCH | 目标架构 |
CGO_ENABLED | 启用/禁用 cgo |
AZURE_BLOBSTORE_TOKEN | 上传到 Azure 的令牌 |
来源: build/ci.go188-193 build/env.go
go-ethereum 构建系统提供了一套全面的工具,用于构建、测试和打包以太坊客户端。它支持各种平台和架构,可在广泛的环境中进行开发和部署。无论您是开发代码库还是构建生产环境,该构建系统都提供了有效处理 go-ethereum 项目所需的灵活性和功能。