数据湖大数据数据存储【免费下载链接】icebergApache Iceberg项目地址https://gitcode.com/gh_mirrors/icebe/iceberg点击查看免费下载Apache Iceberg 作为 Apache 顶级项目其每个正式版本的诞生都遵循一套严谨、可审计的发布流程Release Manager 负责产出签名与校验的源码候选包RC与 Maven 便捷二进制社区与 PMC 通过投票把关质量发布后还要同步完成版本化文档、Javadoc、网站与 DOAP 元数据的更新。本文以仓库中的 site/docs/how-to-release.md 为核心主线结合 dev/source-release.sh、dev/stage-binaries.sh、deploy.gradle 等真实脚本源码完整还原从准备环境、构建 RC、发起投票、正式发布到验证候选版本的每一个环节帮助你掌握 Apache Iceberg 发布的全链路操作也能作为 Apache 系项目 Release 流程的通用参考。一、发布决策权三类角色的分工Apache Iceberg 的发布决策由三个群体共同完成各自职责边界清晰角色职责说明Release Manager发布经理实际执行发布工作创建发布、签名、统计 投票 结果、对外宣布发布等部分步骤需要 committer 协助社区Community讨论发布时机与内容讨论当前是否适合发布、应包含哪些变更可投非约束性non-binding票PMC对发布投约束性binding票决定发布能否通过的关键群体本文描述的就是发布经理与投票 PMC 成员在整个发布过程中遵循的操作规程。二、发布前环境准备Setup创建发布候选Release Candidate前需要准备以下三样东西Apache LDAP 凭据用于 Nexus 与 SVN 的认证GPG 签名密钥用于对制品签名密钥需已发布在官方 KEYS 文件中指向官方仓库的 Git remote发布必须针对官方仓库apache/iceberg执行而非任何 fork。2.1 发布 GPG 密钥到 KEYS如果尚未发布 GPG 密钥必须在发送投票邮件之前完成发布svn co https://dist.apache.org/repos/dist/release/iceberg icebergsvn cd icebergsvn echo KEYS # append a newline gpg --list-sigs YOUR KEY ID HERE KEYS # append signatures gpg --armor --export YOUR KEY ID HERE KEYS # append public key block svn commit -m add key for YOUR NAME HERE2.2 配置 Nexus 访问Nexus 凭据配置在个人~/.gradle/gradle.properties文件中使用mavenUser和mavenPasswordmavenUseryourApacheID mavenPasswordSomePassword这两个属性会被 deploy.gradle 中的 Maven 仓库配置读取username project.hasProperty(mavenUser) ? $mavenUser : 。从源码可见发布时通过-Prelease开关选择正式的 Apache staging 仓库地址https://repository.apache.org/service/local/staging/deploy/maven2否则默认发布到 snapshots 仓库https://repository.apache.org/content/repositories/snapshots。2.3 PGP 签名配置发布脚本调用命令行gpg工具完成签名这样可以借助 gpg-agent 管理私钥口令避免把私钥口令明文写进配置文件。在~/.gradle/gradle.properties中增加signing.gnupg.keyNameYour Name (CODE SIGNING KEY)如需使用gpg而不是gpg2再设置signing.gnupg.executablegpg这与 deploy.gradle 中的signing { useGpgCmd() }配置呼应——发布时通过-Prelease属性触发对apachepublication 的 GPG 签名。2.4 配置 Apache 官方远程仓库发布必须针对https://github.com/apache/iceberg.git而非任何 fork 执行。若尚未配置将其设置为名为apache的 remotegit remote add apache https://github.com/apache/iceberg.git注意 dev/source-release.sh 的-g参数可以覆盖默认的 remote 名默认即apache脚本会通过git ls-remote --exit-code $remote校验该 remote 是否可访问。三、创建发布候选Release Candidate3.1 与社区发起发布讨论正式构建前通常先在 dev 邮件列表发起[DISCUSS]主题讨论收集社区希望纳入下个版本的补丁并把相关 issue 挂到 GitHub milestone 上。注意创建 GitHub milestone 需要 committer 权限非 committer 若被加入.asf.yaml的 collaborators 列表也可以把任务指派到 milestone发布状态会在每次社区同步会议community sync meeting上讨论Release Manager 应参会汇报进度并讨论任何发布阻断项release blocker。3.2 构建源码发布包使用 dev/source-release.sh 脚本生成源码发布制品参数为发布版本号与候选编号dev/source-release.sh -v 1.8.0 -r 0 -k YOUR KEY ID HERE脚本支持的全部参数如下见脚本usage说明参数含义默认值-v发布版本号必填-r候选RC编号必填-k签名密钥 IDGPG 默认密钥-gGit remote 名称apache-d开启 DEBUG 输出关闭执行后的典型控制台输出Preparing source for apache-iceberg-1.8.0-rc0 Adding version.txt and tagging release... [main ca8bb7d0] Add version.txt for release 1.8.0 1 file changed, 1 insertion() create mode 100644 version.txt Pushing apache-iceberg-1.8.0-rc0 to origin... ... To https://github.com/apache/iceberg.git * [new tag] apache-iceberg-1.8.0-rc0 - apache-iceberg-1.8.0-rc0 Creating tarball using commit ca8bb7d0821f35bbcfa79a39841be8fb630ac3e5 Signing the tarball... Checking out Iceberg RC subversion repo... Checked out revision 52260. Adding tarball to the Iceberg distribution Subversion repo... A tmp/apache-iceberg-1.8.0-rc0 A tmp/apache-iceberg-1.8.0-rc0/apache-iceberg-1.8.0.tar.gz.asc A (bin) tmp/apache-iceberg-1.8.0-rc0/apache-iceberg-1.8.0.tar.gz A tmp/apache-iceberg-1.8.0-rc0/apache-iceberg-1.8.0.tar.gz.sha512 ... Committing transaction... Committed revision 52261. Creating release-announcement-email.txt... Success! The release candidate is available here: https://dist.apache.org/repos/dist/dev/iceberg/apache-iceberg-1.8.0-rc0 Commit SHA1: ca8bb7d0821f35bbcfa79a39841be8fb630ac3e5 We have generated a release announcement email for you here: /Users/jackye/iceberg/release-announcement-email.txt Please note that you must update the Nexus repository URL contained in the mail before sending it out.从 dev/source-release.sh 源码可以看到脚本的具体动作序列基于当前 git HEAD 创建候选 tag如apache-iceberg-1.8.0-rc0并推送到apacheremote生成version.txt与iceberg-build.properties通过./gradlew generateGitProperties来自 tasks.gradle 中的buildInfo任务族用git archive --worktree-attributes打包出 tarball保证 tarball 内容与 tag 提交严格对应使用gpg -u keyid对 tarball 做分离签名.asc并用shasum -a 512生成 SHA-512 校验文件将 tarball、签名、校验和上传到 SVN 的 dev 区https://dist.apache.org/repos/dist/dev/iceberg/apache-iceberg-VERSION-rcNUM/自动生成投票用的发布公告邮件release-announcement-email.txt。请务必记下输出的Commit SHA1与候选地址它们要写进后续的投票邮件。源码包就绪后用它来在 Nexus 上暂存stage便捷二进制制品。3.3 构建并暂存便捷二进制Convenience Binaries便捷二进制使用上一步的源码发布 tarball 构建。先解压并进入发布目录tar xzf apache-iceberg-1.8.0.tar.gz cd apache-iceberg-1.8.0运行 dev/stage-binaries.sh 构建并发布到 release staging 仓库dev/stage-binaries.sh从脚本源码可以看到它实际执行的 Gradle 任务脚本 dev/stage-binaries.sh./gradlew -Prelease -DscalaVersion$SCALA_VERSION -DflinkVersions$FLINK_VERSIONS -DsparkVersions$SPARK_VERSIONS -DkafkaVersions$KAFKA_VERSIONS publishApachePublicationToMavenRepository --no-parallel --no-configuration-cache当前仓库中脚本定义的版本矩阵为SCALA_VERSION2.12、FLINK_VERSIONS1.20,2.1,2.2,2.3、SPARK_VERSIONS3.5,4.0,4.1、KAFKA_VERSIONS3。此外还会对支持 Scala 2.13 的 Spark 3.5 制品iceberg-spark-3.5_2.13、iceberg-spark-extensions-3.5_2.13、iceberg-spark-runtime-3.5_2.13单独补发一次 2.13 版本Flink 尚不支持 2.13Hive 无需 Scala 规格。注意命令中的--no-parallel必须关闭 Gradle 并行否则可能产生多个 staging 仓库。接下来需要关闭Closestaging 仓库登录 Nexus左侧菜单选择 Staging Repositories选中 Iceberg 仓库如果运行脚本后产生了多个 staging 仓库请确认 Gradle 并行已关闭后重试在代理网络环境下出站请求使用浮动 IP也可能产生多个 staging 仓库可通过Activity标签页检查 client IP 验证规避方法是离开企业网络再运行dev/stage-binaries.sh点击顶部 Close 并按提示操作评论comment字段填写Apache Iceberg version RCnum。3.4 发起 VOTE 投票线程候选包的最后一步是在 dev 邮件列表发起 VOTE 线程。邮件模板已由source-release.sh生成在release-announcement-email.txt中部分内容已预填但需要手动更新其中的 Nexus 仓库 URL。主题示例[VOTE] Release Apache Iceberg VERSION RCNUM正文示例Hi everyone, I propose the following RC to be released as official Apache Iceberg VERSION release. The commit id is SHA1 * This corresponds to the tag: apache-iceberg-VERSION-rcNUM * https://github.com/apache/iceberg/commits/apache-iceberg-VERSION-rcNUM * https://github.com/apache/iceberg/tree/SHA1 The release tarball, signature, and checksums are here: * https://dist.apache.org/repos/dist/dev/iceberg/apache-iceberg-VERSION-rcNUM/ You can find the KEYS file here: * https://downloads.apache.org/iceberg/KEYS Convenience binary artifacts are staged in Nexus. The Maven repository URL is: * https://repository.apache.org/content/repositories/orgapacheiceberg-ID/ This release includes important changes that I should have summarized here, but Im lazy. Please download, verify, and test. Please vote in the next 72 hours. (Weekends excluded) [ ] 1 Release this as Apache Iceberg VERSION [ ] 0 [ ] -1 Do not release this because... Only PMC members have binding votes, but other community members are encouraged to cast non-binding votes. This vote will pass if there are 3 binding 1 votes and more binding 1 votes than -1 votes.四、发布收尾Finishing the Release投票通过后需要把最后一个候选的制品正式发布。注意制品发布应与新版文档发布同步进行因此执行下述步骤前应确保 文档发布 的相关变更已准备就绪。4.1 发布源码制品到 releases 区首先把源码发布目录从 dev 区拷贝到 releases 区svn mv https://dist.apache.org/repos/dist/dev/iceberg/apache-iceberg-VERSION-rcN https://dist.apache.org/repos/dist/release/iceberg/apache-iceberg-VERSION -m Iceberg: Add release VERSION注意此步骤需要 PMC 权限才能执行。接着基于通过的候选 tag 添加正式发布 taggit tag -am Release Apache Iceberg VERSION apache-iceberg-VERSION apache-iceberg-VERSION-rcN然后在 GitHub 上用上述 tag 创建新的 Release最后在 Nexus 中把候选仓库staging repositoryRelease 出去。4.2 对外宣布发布等到 Maven Central 镜像同步了 Apache 二进制之后更新 Iceberg 网站并发送公告邮件[ANNOUNCE] Apache Iceberg release VERSIONIm pleased to announce the release of Apache Iceberg VERSION! Apache Iceberg is an open table format for huge analytic datasets. Iceberg delivers high query performance for tables with tens of petabytes of data, along with atomic commits, concurrent writes, and SQL-compatible table evolution. This release can be downloaded from: https://www.apache.org/dyn/closer.cgi/iceberg/TARBALL NAME WITHOUT .tar.gz/TARBALL NAME Release notes: https://iceberg.apache.org/releases/#XYZ-release Java artifacts are available from Maven Central. Thanks to everyone for contributing!4.3 更新 revapiAPI 兼容性检查在iceberg仓库中创建一个 PR让 revapi 针对新发布版本运行用于跟踪 API 兼容性变化。4.4 更新 GitHub在iceberg仓库创建 PR把新版本加入 GitHub issue 模板的版本列表在 GitHub 上草拟新的 Release 以展示最新版本可以使用 GitHub 自动生成的 changelog。4.5 更新 DOAPASF 项目描述创建 PR 更新仓库根目录 doap.rdf 文件中的release/部分当前仓库中的示例版本为 1.11.0release Version namex.y.z/name createdyyyy-mm-dd/created revisionx.y.z/revision /Version /release五、投票Voting投票通过在 dev 邮件列表回复候选发布公告邮件完成回复内容为1、0或-1[ ] 1 Release this as Apache Iceberg {{ icebergVersion }}[ ] 0[ ] -1 Do not release this because...投票时按惯例要说明自己的票是约束性binding还是非约束性non-binding。只有 Project Management CommitteePMC成员的票才具有正式约束力如果不确定可以声明自己的票为非约束性。5.1 投票结果公布候选通过或否决后用以下格式回复投票结果Subject: [RESULT][VOTE] Release Apache Iceberg VERSION RCNUMThanks everyone who participated in the vote for Release Apache Iceberg VERSION RCNUM. The vote result is: 1: 3 (binding), 5 (non-binding) 0: 0 (binding), 0 (non-binding) -1: 0 (binding), 0 (non-binding) Therefore, the release candidate is passed/rejected.六、如何验证一个发布How to Verify a Release每个 Apache Iceberg 发布都由社区通过投票来验证。社区发布经理准备候选版本并在 Iceberg dev 邮件列表发起投票社区成员在其下游项目和环境中测试候选版本。投票时建议报告你测试过的 Java、Scala、Spark、Flink 和 Hive 版本。除下游项目测试外社区成员还会检查发布的签名、校验和与许可证文档。6.1 验证源码发布候选发布公告中包含以下链接源码 tarball签名.asc校验和.sha512KEYS 文件GitHub 变更对比6.2 验证签名首先导入密钥curl https://downloads.apache.org/iceberg/KEYS -o KEYS gpg --import KEYS然后验证.asc文件gpg --verify apache-iceberg-*.tar.gz.asc6.3 验证校验和shasum -a 512 --check apache-iceberg-*.tar.gz.sha5126.4 验证许可证文档解压归档并进入源码目录tar xzf apache-iceberg-*.tar.gz cd apache-iceberg-*/运行 RAT 检查验证许可证头。仓库中的 dev/check-license 脚本会从 Maven 中央仓库拉取apache-rat-0.17.jarRAT_VERSION0.17以dev/.rat-excludes为排除规则、missing-headers为输出风格扫描整个仓库任何缺失许可证头的文件都会导致检查失败dev/check-license6.5 验证构建与测试要验证候选版本能正确构建运行./gradlew build6.6 测试发布二进制发布公告还会包含 Maven 仓库地址。可以把它加入 Maven 或 Gradle 构建来测试下游依赖。Maven 构建POM或settings.xml... repositories repository idiceberg-release-candidate/id nameIceberg Release Candidate/name url${MAVEN_URL}/url /repository /repositories ...Gradle 构建build.gradlerepositories { mavenCentral() maven { url ${MAVEN_URL} } }注意将${MAVEN_URL}替换为发布公告中提供的 URL。6.7 用 Spark 验证使用 Spark 验证时用类似下面的命令启动spark-shell根据 Spark 安装版本选择对应的 spark-runtime jarspark-shell \ --conf spark.jars.repositories${MAVEN_URL} \ --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:{{ icebergVersion }} \ --conf spark.sql.extensionsorg.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \ --conf spark.sql.catalog.localorg.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.local.typehadoop \ --conf spark.sql.catalog.local.warehouse$PWD/warehouse \ --conf spark.sql.catalog.local.default-namespacedefault \ --conf spark.sql.defaultCataloglocal6.8 用 Flink 验证使用 Flink 验证时用以下命令启动 Flink SQL Clientwget ${MAVEN_URL}/iceberg-flink-runtime-1.20/{{ icebergVersion }}/iceberg-flink-runtime-1.20-{{ icebergVersion }}.jar sql-client.sh embedded \ -j iceberg-flink-runtime-1.20-{{ icebergVersion }}.jar \ -j flink-connector-hive_2.12-1.20.jar \ shell七、文档发布Documentation Release7.1 生成版本化 Docs版本化文档位于发布 tag 源码中的docs目录例如apache-iceberg-1.8.0tag 下的 docs。检出iceberg仓库的docs分支把版本化文档拷贝过去cp -R iceberg/docs 1.8.0完成后针对docs分支创建一个包含1.8.0目录下变更的 PR。注意在拷贝过来的mkdocs.yml中把站点名称从docs/latest更新为docs/1.8.0。7.2 生成版本化 Javadoc进入源码 tarball 并生成 Javadoc注意生成 Javadoc 时必须使用 JDK 17。cd apache-iceberg-1.8.0 ./gradlew refreshJavadoc从 tasks.gradle 的源码可以看到refreshJavadoc任务链removeJavadoc删除旧版本目录→aggregateJavadoc聚合所有非iceberg-bom子项目的 javadoc 到site/docs/javadoc/${getJavadocVersion()}并在search.js末尾追加搜索修复片段→ 重新生成最终产出site/docs/javadoc/version/。版本化 Javadoc 会生成在site/docs/javadoc/1.8.0下。检出iceberg仓库的javadoc分支并拷贝过去cp -R apache-iceberg-1.8.0/site/docs/javadoc/1.8.0 1.8.0完成后针对javadoc分支创建一个包含这些变更的 PR。7.3 网站更新提交 PR更新 Iceberg 版本号、指向新版本文档的链接以及 release notes。PR 合并后只要 push 到main且涉及docs/、site/或format/site-ciGitHub Actions 工作流就会被自动触发运行make deploy构建文档站点并推送到asf-site分支从而发布新版本的文档与 Javadoc。网站会自动更新发布流程中不再需要手动执行make deploy。此外仓库中的 site/hooks/version_alias.py 会在站点构建时创建docs/icebergVersion→docs/latest的符号链接当前 site/mkdocs.yml 中icebergVersion为1.11.0确保版本化 URL 与 latest 并存可用。八、投票规则与投票结果公布投票通过在 dev 邮件列表回复候选发布公告邮件完成票型为1/0/-1只有 PMC 成员具有约束性binding投票权社区成员可投非约束性non-binding票候选通过的条件是至少有 3 张约束性 1 票且约束性 1 票数多于 -1 票数候选通过或否决后以[RESULT][VOTE]主题回复公布投票统计结果并给出 passed/rejected 结论。九、发布检查清单流程速览阶段关键动作参考脚本/文件环境准备发布 GPG 密钥、配置~/.gradle/gradle.properties、配置apacheremote本文第二节构建源码 RCdev/source-release.sh -v V -r N -k KEYdev/source-release.sh暂存二进制解压 tarball 后执行dev/stage-binaries.sh再在 Nexus 中 Close staging 仓库dev/stage-binaries.sh发起投票更新release-announcement-email.txt中的 Nexus URL 后发送[VOTE]邮件本文第三节投票社区 1/0/-1PMC binding 票 ≥3 且多于 -1 即通过本文第五节正式发布svn mv到 release 区、添加正式 tag、GitHub Release、Nexus Release、[ANNOUNCE]邮件本文第四节收尾更新revapi PR、GitHub issue 模板 PR、doap.rdf PR本文第四节文档发布版本化 docs / Javadoc PR、网站自动部署site-ci本文第七节候选验证KEYS 导入、gpg --verify、shasum -a 512、dev/check-license、./gradlew build、Spark/Flink 实测dev/check-license结语Apache Iceberg 的发布流程将「版本产出—质量把关—正式发布—资产沉淀」串成了一条可审计、可复现的流水线source-release.sh负责把 git 状态固化为带签名与校验和的源码包stage-binaries.sh与 deploy.gradle 负责多版本矩阵的 Maven 便捷二进制暂存社区投票与 PMC binding 票决定候选去留而版本化 docs/Javadoc 与 DOAP 更新则保证发布资产长期可追溯。无论是作为 Release Manager 亲历一次发布还是作为社区成员验证某个候选版本都可以直接对照本文的脚本源码与命令清单操作。赞分享数据湖大数据数据存储【免费下载链接】icebergApache Iceberg项目地址https://gitcode.com/gh_mirrors/icebe/iceberg点击查看免费下载相关推荐Apache Arrow 发布候选版本验证流程从源码签名校验到投票的完整指南Apache Arrow 发布候选版本验证流程从源码签名校验到投票的完整指南 导读 本文基于 Apache Arrow 官方开发者文档 docs/source大数据数据分析数据工程序列化Apache Arrow 发布候选版本验证全流程指南从脚本原理到投票实操Apache Arrow 发布候选版本验证全流程指南从脚本原理到投票实操 Apache Arrow 是一个多语言的内存数据交换与处理工具箱其每个正式版本都遵数据工程数据分析大数据Apache Arrow 发布候选版本验证流程全指南Release Verification ProcessApache Arrow 发布候选版本验证流程全指南Release Verification Process 本指南系统讲解 Apache Arrow 项目数据工程大数据序列化数据分析上一篇KnowStreaming常见错误代码解析快速定位问题根源下一篇如何用gs-quant实现外汇算法交易5大止盈策略参数优化终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考