菜单

构建与测试

相关源文件

本页面提供了有关如何从源代码构建etcd及其运行测试套件的全面指南。这些说明对于希望为etcd做出贡献或测试代码库修改的开发人员至关重要。有关发布过程的信息,请参阅发布流程,有关CI/CD管道的详细信息,请参阅CI/CD管道

先决条件

在构建etcd之前,请确保您已安装

  1. Go:仓库根目录下.go-version文件中指定的版本
  2. Git:用于检出仓库
  3. GNU Make:用于运行构建命令

构建etcd

etcd使用基于Makefile的构建系统,提供了各种目标以满足不同的构建场景。

基本构建

要构建etcd二进制文件,请运行

此命令会在bin/目录中构建etcd二进制文件。

来源:Makefile7-9

特定平台构建

etcd支持为各种平台构建

可用平台:linux-amd64, linux-386, linux-arm, linux-arm64, linux-ppc64le, linux-s390x, darwin-amd64, darwin-arm64, windows-amd64, windows-arm64

为所有支持的平台构建

来源:Makefile11-21

构建工具

构建etcd工具

来源:Makefile23-25

构建系统架构

以下是etcd构建系统组件的概述

来源:Makefile1-25

测试etcd

etcd采用全面的测试策略,包含多种测试类型,以确保代码质量和正确性。

测试类型

etcd的测试套件包括

测试类型描述常见用法
单元测试隔离测试单个组件make test-unit
集成测试测试组件之间的交互make test-integration
端到端(e2e)测试测试完整的系统功能make test-e2e
代理测试测试gRPC代理功能make test-grpcproxy-integration, make test-grpcproxy-e2e
健壮性测试测试系统在高压下的稳定性make test-robustness

来源:Makefile31-71 scripts/test.sh115-156

运行测试

运行全部测试套件

运行特定测试类型

来源:Makefile31-57

测试工作流

以下图示说明了测试执行工作流程

来源:scripts/test.sh31-337 Makefile63-69

运行特定测试

要运行特定包或测试用例的测试

当您想专注于测试特定组件时,此功能非常有用。

来源:scripts/test.sh15-27

测试配置选项

可以通过环境变量配置测试

可变描述
PASSES要运行的测试通过(例如,“unit”,“integration”,“e2e”)
PKG要测试的包(例如,“./wal”,“./clientv3”)
TESTCASE测试用例过滤器(支持正则表达式)
TIMEOUT测试超时(默认值因测试类型而异)
KEEP_GOING_SUITE设置为true以在失败时继续下一个套件
KEEP_GOING_MODULE设置为true以在失败时继续下一个模块
COVERDIR覆盖率输出文件的目录

来源:scripts/test.sh60-61 scripts/test.sh193-211

代码覆盖率

生成代码覆盖率报告

将覆盖率报告上传到Codecov

来源:Makefile63-69 scripts/codecov_upload.sh1-18

静态分析与验证

etcd包含各种验证工具以确保代码质量

自动修复常见问题

来源:Makefile76-83 scripts/fix.sh1-39

开发工作流

以下图示说明了etcd的典型开发工作流程

来源:Makefile1-227 scripts/test.sh1-676

高级构建选项

构建标志

您可以指定自定义的Go构建标志

交叉编译

交叉编译到不同平台

来源:Makefile19-21

持续集成

etcd使用GitHub Actions进行持续集成。CI过程运行各种检查

  1. 标准测试:单元、集成和端到端测试
  2. CodeQL分析:代码质量和安全分析
  3. Scorecard:供应链安全检查
  4. TestGrid Flakiness:测试可靠性测量

来源:.github/workflows/codeql-analysis.yml1-56 .github/workflows/scorecards.yml1-56 .github/workflows/measure-testgrid-flakiness.yaml1-27

常见问题排查

构建失败

  • 缺少依赖项:确保已安装所有必需的依赖项。
  • Go版本不匹配:验证您使用的Go版本是否与.go-version文件中指定的版本一致。
  • 权限问题:检查您对输出目录是否有写入权限。

测试失败

  • 超时:某些测试在较慢的系统上可能会超时。尝试使用TIMEOUT=5m增加超时时间。
  • 端口冲突:如果端口已被占用,测试可能会失败。确保没有运行其他etcd实例。
  • 文件描述符:某些测试需要大量文件描述符。如果测试因“文件过多”而失败,请增加系统的限制。

结论

本文档提供了构建和测试etcd的全面概述。通过遵循这些说明,您可以从源代码构建etcd,运行测试,并确保您的代码更改符合项目的质量标准。有关贡献代码的信息,请参阅贡献