
数据库分布式数据库后端【免费下载链接】cassandraMirror of Apache Cassandra项目地址https://gitcode.com/gh_mirrors/cassandr/cassandra点击查看免费下载Apache Cassandra 的构建与测试既可以通过传统ant命令完成也提供了一套更完整的辅助脚本体系位于仓库根目录的 .build 目录下。本篇技术指南以 .build/README.md 为核心系统梳理这套脚本的用法如何在 Docker 容器内外完成代码检查Checkstyle 等 lint、构建 tarball 与 Maven 产物、构建 Debian/RedHat 安装包、运行从单元测试到分布式 dtest 的全系列测试以及如何接入 SonarQube 静态分析。读完本文你将能够独立复现 Cassandra CI 流水线的核心步骤并理解其中同一份脚本、Docker 内外两种执行方式的设计原理。脚本体系总览Docker 与非 Docker 双轨设计.build目录下的辅助脚本遵循统一的设计约定Docker 版本位于 .build/docker/以docker run方式在容器内执行是 CI如 Jenkins默认路径非 Docker 版本直接位于 .build/ 根目录要求宿主机已安装ant、git、对应 JDK 等工具链所有脚本在首个参数为-h时都会打印帮助信息所有脚本的公共参数约定可选的JDK 版本参数如11、17默认使用 build.xml 中java.default属性指定的版本可选的build_dir环境变量用于指定构建输出目录从而支持同一份源码并行发起多个构建。核心脚本与功能对照功能Docker 执行非 Docker 执行代码检查与 lint.build/docker/check-code.sh.build/check-code.sh构建 tarball / Maven 产物.build/docker/build-artifacts.sh.build/build-artifacts.sh构建 Debian 包.build/docker/build-debian.sh仅支持 Docker构建 RedHat 包.build/docker/build-redhat.sh仅支持 Docker运行测试.build/docker/run-tests.sh.build/run-tests.sh、.build/run-python-dtests.shSonar 分析ant sonar配合本地 SonarQube 容器同左代码检查与 Lint一键跑完静态检查在 Docker 中运行代码检查.build/docker/check-code.sh在宿主机直接运行需本地具备ant.build/check-code.sh指定 JDK 版本该约定适用于所有构建脚本.build/docker/check-code.sh 11指定独立构建路径可用于同一源码路径并行构建适用于所有构建脚本build_dir/tmp/cass_Mtu462n .build/docker/check-code.sh实现原理查看 .build/check-code.sh 可知非 Docker 版本本质上执行的是ant -f ${CASSANDRA_DIR}/build.xml check脚本源码中保留了被注释的dependency-check目标注释说明dependency-check 现在需要先下载 NVD key即依赖漏洞检查OWASP Dependency Check默认被跳过。Docker 版本 .build/docker/check-code.sh 则会额外设置-Ddependency-check.home.base/tmp并委托 .build/docker/_docker_run.sh 在bullseye-build.docker镜像中执行。Checkstyle 相关规则集中在 .build/checkstyle.xml 与 .build/checkstyle_test.xml抑制规则见 .build/checkstyle_suppressions.xmlOWASP 依赖检查的抑制清单见 .build/owasp/dependency-check-suppressions.xml。构建发布产物tarball 与 Maven 构件构建 tarball 和 Maven 构件产出位于build/目录# Docker 方式 .build/docker/build-artifacts.sh # 非 Docker 方式需 ant .build/build-artifacts.sh # 指定 JDK .build/docker/build-artifacts.sh 11实现原理.build/build-artifacts.sh 实际执行ant -f build.xml artifacts -Dant.gen-doc.skiptrue -Dcheck.skiptrue即在产出发布构件时跳过文档生成与代码检查以加速。Docker 包装脚本 .build/docker/build-artifacts.sh 通过 _docker_run.sh 在bullseye-build.docker镜像中运行。构建 Debian 与 RedHat 软件包打包脚本仅设计用于 Docker 环境原因在于打包过程需要修改本地受版本控制的文件隔离在容器中更安全# Debian 包 .build/docker/build-debian.sh # RedHat 包rpm .build/docker/build-redhat.sh # 指定 JDK 版本 .build/docker/build-debian.sh 11 .build/docker/build-redhat.sh rpm 11实现原理.build/docker/build-debian.sh 会在执行前打印警告此脚本会修改本地受版本控制的文件随后委托 _docker_run.sh 执行容器内的 .build/docker/_build-debian.sh。相关的打包模板与配置位于仓库的 debian/如control、rules、cassandra.install与 redhat/如cassandra.spec、cassandra.in.sh目录。运行测试从单元测试到分布式测试全覆盖基础用法Docker 方式运行单元测试.build/docker/run-tests.sh test非 Docker 方式.build/run-tests.sh test按分片split运行支持并行将单元测试均分为 64 份并只运行第 1 份.build/docker/run-tests.sh test 1/64分片格式为K/NN 份中的第 K 份例如1/4、2/4。同时指定 JDK.build/docker/run-tests.sh test 1/64 11实现原理查看 .build/run-tests.sh 的_list_tests与_split_tests函数可知脚本通过find test/前缀 -name *Test.java枚举测试类再用 GNUsplit -n r/K/NmacOS 上回退到gsplit完成轮转分片如果某个分片中没有测试类脚本会取第一个测试类来运行以保证生成 JUnit XML 报告。按正则表达式筛选测试类只运行名字匹配正则的单元测试.build/docker/run-tests.sh test VerifyTest 11 .build/docker/run-tests.sh test Compaction*Test$ 11实现原理第二个参数若不是K/N分片格式则被当作正则交给grep -e过滤测试类列表见 .build/run-tests.sh 的_split_tests。支持的测试类型全集测试类型说明test标准单元测试stress-testtools/stress 压力测试工具测试fqltool-testFQL 工具tools/fqltool测试microbenchJMH 微基准测试test-cdcCDC变更数据捕获单元测试test-compression压缩相关单元测试test-oa旧格式OA兼容性单元测试test-system-keyspace-directorysystem keyspace 目录配置测试test-latest最新格式单元测试test-burn燃烧测试test/burnlong-test长期测试test/longcqlsh-testcqlsh 外壳测试基于 pylibjvm-dtest/jvm-dtest-novnodeJVM 内分布式测试test/distributed-novnode变体使用单 token 配置jvm-dtest-upgradeJVM 分布式升级测试dtest系列dtest-novnode、dtest-latest、dtest-large、dtest-upgrade等Python 分布式测试依赖cassandra-dtest仓库对应命令示例Docker 方式.build/docker/run-tests.sh test .build/docker/run-tests.sh stress-test .build/docker/run-tests.sh fqltool-test .build/docker/run-tests.sh microbench .build/docker/run-tests.sh test-cdc .build/docker/run-tests.sh test-compression .build/docker/run-tests.sh test-oa .build/docker/run-tests.sh test-system-keyspace-directory .build/docker/run-tests.sh test-latest .build/docker/run-tests.sh test-burn .build/docker/run-tests.sh long-test .build/docker/run-tests.sh cqlsh-test .build/docker/run-tests.sh jvm-dtest .build/docker/run-tests.sh jvm-dtest-upgrade .build/docker/run-tests.sh dtest .build/docker/run-tests.sh dtest-novnode .build/docker/run-tests.sh dtest-latest .build/docker/run-tests.sh dtest-large .build/docker/run-tests.sh dtest-large-novnode .build/docker/run-tests.sh dtest-upgrade .build/docker/run-tests.sh dtest-upgrade-largePython dtest 的非 Docker 运行Python 分布式测试dtest系列在非 Docker 环境下使用独立的包装脚本 .build/run-python-dtests.sh# 运行 dtest .build/run-python-dtests.sh dtest # 运行 dtest-upgrade-large .build/run-python-dtests.sh dtest-upgrade-large该脚本要求cassandra-dtest源码位于CASSANDRA_DIR/../cassandra-dtest可用CASSANDRA_DTEST_DIR环境变量覆盖并会设置一系列面向测试性能与稳定性的环境变量如CCM_MAX_HEAP_SIZE1024M、CASSANDRA_SKIP_SYNCtrue、NUM_TOKENS16等。其他 JVM 测试类型在非 Docker 下通过 .build/run-tests.sh 运行.build/run-tests.sh jvm-test前置条件与关键约束从 .build/run-tests.sh 的源码可以提炼出以下约束值得在实际使用前注意必须先用ant jar构建项目脚本会检查build/apache-cassandra-版本.jar是否存在存在build/dist目录时测试无法运行该目录来自ant artifacts需要先移除测试超时时间test.timeout、test.burn.timeout、test.long.timeout、test.distributed.timeout均从 build.xml 读取jvm-dtest-upgrade不能使用与升级路径不重叠的 JDK如仅支持 JDK11/17 混合升级场景运行结束时脚本会调用ant generate-test-report合并所有 JUnit XML 并输出汇总数字。Docker 执行机制的深入剖析通用包装器 _docker_run.sh所有 Docker 版本脚本check-code、build-artifacts、build-debian/redhat都委托给 .build/docker/_docker_run.sh其关键机制包括镜像管理镜像名形如apache/cassandra-bullseye-build:tag其中 tag 是 Dockerfile 内容的 MD5 值本地没有时先尝试docker pull失败则docker build带重试目录挂载将仓库源码挂到/home/build/cassandra、宿主 Maven 仓库挂到/home/build/.m2/repository/、build_dir挂到/distJDK 切换容器内通过 .build/docker/_set_java.sh 调用update-java-alternativesDebian/Ubuntu或alternatives其他发行版切换java/javac并导出正确的JAVA_HOME安全选项以--security-opt seccompunconfined运行避免默认 seccomp 配置干扰构建Git worktree 支持当仓库目录是一个 git worktree 时.git为文件而非目录会自动挂载其原始工作目录保证 git 操作在容器内外一致。测试专用包装器 docker/run-tests.sh测试专用包装器 .build/docker/run-tests.sh 的用法与参数Usage: run-tests.sh test_type [split_chunk|test_regexp] [java_version] 默认 split_chunk 为 1/1 默认 java_version 为 build.xml 中 java.default 指定的版本其额外能力包括使用ubuntu2004_test.docker构建测试镜像并对不同测试类型施加差异化内存约束test、test-cdc、test-oa、jvm-dtest等要求约 6 GiB/执行器microbench、test-burn、long-test、cqlsh-test要求约 6 GiB/执行器并限制 CPUsimulator-dtest与全部dtest*系列要求约 16 GiB/执行器若在 Jenkins 环境检测到JENKINS_URL与NODE_NAME会通过 REST API 获取执行器数量以按机器算力切分资源支持环境变量定制build_dir构建目录、m2_dirMaven 仓库、python_versionPython 版本、cythonyes仅 cqlsh-test 可用、DEBUG1dtest 相关目标会额外挂载cassandra_dtest_dir并设置testtag.extra以区分测试聚合标签dtest-upgrade还会预先填充 ccm 仓库目录见 .build/docker/_copy_ccm_repositories.sh测试日志写入build/test/logs/docker_attach_容器名.log并自动以xz压缩失败时输出docker inspect、docker logs等信息辅助排查。接入 SonarQube 静态分析实验性使用现有 SonarQube 服务器如果已有可用的 SonarQube 服务器设置以下环境变量后直接分析SONAR_HOST_URLhttp://sonar.example.com SONAR_CASSANDRA_TOKENcassandra-project-analysis-token SONAR_PROJECT_KEYkey of the Cassandra project in SonarQube ant sonar一键启动本地 SonarQubeDocker无需外部服务器时可在本地 Docker 容器中启动 SonarQubeant sonar-create-server服务器将运行在http://localhost:9000管理员账号为admin/password容器名为sonarqube。使用本地实例时无需配置上述三个环境变量——脚本会读取 .build/sonar/sonar-quality-profile.xml 与 .build/sonar/sonar-quality-gate.json 自动完成项目创建、质量配置文件Quality Profile与质量门禁Quality Gate的初始化随后直接执行ant sonar分析完成后服务器保持运行可在浏览器中查看结果。停止、重启与清理本地服务器# 停止容器不删除便于下次继续查看历史分析结果 ant sonar-stop-server # 稍后重新启动并访问之前的分析结果 docker container start sonarqube # 彻底删除容器 docker container rm sonarqube自定义质量配置文件如需使用自定义质量配置先用ant sonar-create-server启动服务器在 Web 界面手工创建项目并配置质量配置文件再为项目生成分析 token导出以下环境变量后运行ant sonarSONAR_HOST_URLhttp://127.0.0.1:9000 SONAR_CASSANDRA_TOKENtoken SONAR_PROJECT_KEYkey of the Cassandra project in SonarQubeSonar 相关的辅助脚本还包括 .build/sonar/sonar-report.sh 与 .build/sonar/sonar-setup-local.sh可用于生成报告与本地环境初始化。小结Apache Cassandra 的 .build 脚本体系把构建、检查、打包与测试封装成了统一、可参数化、可并行化的命令入口Docker 版本保证了 CI 环境的一致性镜像按 Dockerfile 内容哈希缓存、JDK 通过 alternatives 切换、资源按测试类型差异化分配非 Docker 版本则方便本地快速验证但需要ant、git与对应 JDK。结合 build.xml 中定义的目标与超时参数这套脚本完整覆盖了从check、artifacts、build-debian/redhat到test、stress-test、dtest、microbench的发布与测试流水线是理解 Cassandra 持续集成流程的最佳入口。赞分享数据库分布式数据库后端【免费下载链接】cassandraMirror of Apache Cassandra项目地址https://gitcode.com/gh_mirrors/cassandr/cassandra点击查看免费下载相关推荐Apache Cassandra 构建与测试辅助脚本完全指南从 JAR 构建到测试分片与 Sonar 分析Apache Cassandra 构建与测试辅助脚本完全指南从 JAR 构建到测试分片与 Sonar 分析 本篇指南以仓库 .build/README.md数据库分布式数据库大数据后端Apache Cassandra 仓库的 AI 辅助开发指南构建、测试与代码检查实战Apache Cassandra 仓库的 AI 辅助开发指南构建、测试与代码检查实战 Apache Cassandra 是开源的分布式 NoSQL 数据库以数据库分布式数据库大数据后端angular-devkit/build-angular 构建器指南Angular CLI 的 Architect 构建与测试体系angular devkit/build angular 构建器指南Angular CLI 的 Architect 构建与测试体系 导读 angularCLI开发工具前端构建构建工具代码生成前端上一篇超实用IBM Plex数学字体与LaTeX无缝集成教程下一篇Fleet 代码评审实战指南基于 review-pr Skill 的 PR 审查流程与 Go/SQL/安全约定检查清单创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考