贡献代码

发布指南

师成师成· 更新于 2026-09-29· 阅读 17 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

简介

Apache Kyuubi 项目会定期宣布并发布版本。一次发布指的是项目的若干个构件包,它们已获批准,可面向公众分发和使用。根据对其质量和可变性的评估,发布可能会带有不同程度的限定说明,例如 “alpha”“beta”“incubating”“stable” 等。

Kyuubi 社区高度重视发布工作。发布是项目的公开形象,大多数用户仅通过发布来了解和使用该项目。每次发布都需要经过整个 Kyuubi 社区的公开投票签署确认。

每次发布都由一名发布经理(Release Manager)执行,发布经理从 Kyuubi 的提交者中选出。本文档描述了发布经理执行发布所遵循的流程。对该流程的任何变更都应在 dev 邮件列表上进行讨论并获得通过。

请记住,发布软件具有法律后果。本指南是全基金会范围的产品发布政策和发布分发政策的补充。

概述

发布流程包含以下几个步骤:

  1. 决定发布
  2. 为发布做准备
  3. 为 feature 版本切出分支
  4. 构建发布候选版本
  5. 对发布候选版本进行投票
  6. 如有必要,修复问题并返回第 3 步。
  7. 完成发布
  8. 推广发布
  9. 删除已废弃发布候选版本的 dist 仓库目录
  10. 发布 docker 镜像

决定发布

决定发布并选出发布经理是发布流程的第一步。这是整个社区达成共识的决定。

任何人都可以在 dev 邮件列表上提出发布建议,给出充分的理由,并提名一位提交者担任发布经理(可以是自己)。这一过程没有正式的流程要求、投票要求或时间要求。任何反对意见都应在启动发布之前通过共识方式解决。

通常,社区倾向于采用 1-2 名发布经理轮换的机制。保持一个较小的核心经理团队,可以让足够多的人在这一领域积累经验并持续改进流程,而无需发布经理在每次发布时重新学习流程。话虽如此,如果你是一位有兴趣以这种方式服务社区的提交者,请通过 dev 邮件列表与社区取得联系。

进入下一步的检查清单

  1. 社区同意发布
  2. 社区选定发布经理

为发布做准备

在进行首次发布之前,你需要执行一次性的配置步骤。这将为签署发布配置你的安全密钥,并配置对各个发布仓库的访问权限。

一次性设置说明

ASF 身份认证

环境变量 ASF_USERNAME 和 ASF_PASSWORD 在发布流程中的多个地方会被反复使用,你既可以在 ~/.bashrc 或 ~/.zshrc 中一次性设置它们,也可以每次在终端中手动导出它们。

export ASF_USERNAME=<your apache username>
export ASF_PASSWORD=<your apache password>

Java Home

可用的环境变量 JAVA_HOME,可以通过执行 echo $JAVA_HOME 来检查。请注意,Java 版本必须为 8。

Subversion

除了 git 之外,Apache 发布还需要 svn,详情请参考 https://www.apache.org/dev/version-control.html#https-svn。

GPG Key

你需要拥有一个 GPG 密钥来为发布产物签名。请留意 ASF 全局的发布签名指南。如果你的 Apache 账户还没有关联 GPG 密钥,请按照该指南创建一个。

确定你的 Apache GPG 密钥及其 Key ID,方法如下:

gpg --list-keys --keyid-format SHORT

这会列出你的 GPG 密钥。其中应有一把密钥对应你的 Apache 账户,例如:

pub   rsa4096 2021-08-30 [SC]
      8FC8075E1FDC303276C676EE8001952629BCC75D
uid           [ultimate] Cheng Pan <chengpan@apache.org>
sub   rsa4096 2021-08-30 [E]

注意:为了遵循 Apache 的发布签名规范,所有新生成的 RSA 密钥至少应为 4096 位。请勿生成新的 DSA 密钥。

这里的密钥 ID 是 pub 行中的 8 位十六进制字符串:29BCC75D。

要导出 PGP 公钥,请使用:

gpg --armor --export 29BCC75D

如果你有多个 GPG 密钥,可以按如下方式指定默认密钥:

echo 'default-key <key-fpr>' > ~/.gnupg/gpg.conf

最后一步是用你的代码签名密钥更新 KEYS 文件:https://www.apache.org/dev/openpgp.html#export-public-key

svn checkout --depth=files "https://dist.apache.org/repos/dist/release/kyuubi" work/svn-kyuubi

(gpg --list-sigs "${ASF_USERNAME}@apache.org" && gpg --export --armor "${ASF_USERNAME}@apache.org") >> work/svn-kyuubi/KEYS

svn commit --username "${ASF_USERNAME}" --password "${ASF_PASSWORD}" --message "Update KEYS" work/svn-kyuubi

为了让自己拥有在 Apache Nexus 暂存仓库中暂存 Java 制品的正确权限,请通过以下方式将你的 GPG 公钥提交到 ubuntu 服务器。

gpg --keyserver hkp://keyserver.ubuntu.com --send-keys ${PUBLIC_KEY} # send public key to ubuntu server
gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys ${PUBLIC_KEY} # verify

为功能版本创建分支

Kyuubi 使用版本号规则 {MAJOR_VERSION}.{MINOR_VERSION}.{PATCH_VERSION}[-{OPTIONAL_SUFFIX}],例如 1.7.0。**功能版本(Feature Release)是指 MAJOR_VERSION 或 MINOR_VERSION 发生变化,而补丁版本(Patch Release)**是指 PATCH_VERSION 发生变化。

准备功能版本的主要步骤是创建发布分支。这通过标准的 Git 分支机制完成,分支创建后应当向社区公告。

注意:如果你要发布的是补丁版本,可以跳过这一步。

发布分支的命名规则为 branch-{MAJOR_VERSION}.{MINOR_VERSION},例如 branch-1.7。

创建发布分支后,别忘了在 master 分支上提升版本号。

构建发布候选版本

别忘了切换到发布分支!

  • 设置环境变量。
export RELEASE_VERSION=<release version, e.g. 1.7.0>
export RELEASE_RC_NO=<RC number, e.g. 0>
export NEXT_VERSION=<e.g. 1.7.1>
  • 提升版本号,并为发布候选版本创建 git 标签。

考虑到在你的发布期间,其他提交者可能会合并 PR,你应该先完成版本号的修改,然后再回来创建发布候选版本标签,继续执行后续的发布流程。

标签格式为 v${RELEASE_VERSION}-rc${RELEASE_RC_NO},例如 v1.7.0-rc0

注意:在所有投票通过之后,务必以 v${RELEASE_VERSION} 的格式创建最终标签。

# Bump to the release version
build/mvn versions:set -DgenerateBackupPoms=false -DnewVersion="${RELEASE_VERSION}"
(cd kyuubi-server/web-ui && npm version "${RELEASE_VERSION}")
git commit -am "[RELEASE] Bump ${RELEASE_VERSION}"

# Create tag
git tag v${RELEASE_VERSION}-rc${RELEASE_RC_NO}

# Prepare for the next development version
build/mvn versions:set -DgenerateBackupPoms=false -DnewVersion="${NEXT_VERSION}-SNAPSHOT"
(cd kyuubi-server/web-ui && npm version "${NEXT_VERSION}-SNAPSHOT")
git commit -am "[RELEASE] Bump ${NEXT_VERSION}-SNAPSHOT"

# Push branch to apache remote repo
git push apache

# Push tag to apache remote repo
git push apache v${RELEASE_VERSION}-rc${RELEASE_RC_NO}

# Go back to release candidate tag
git checkout v${RELEASE_VERSION}-rc${RELEASE_RC_NO}
  • 打包源码和二进制制品,并将其上传至 Apache 暂存 SVN 仓库;将 jar 包发布到 Apache 暂存 Maven 仓库。
build/release/release.sh publish

要使你的发布在暂存仓库中可用,你必须在 Apache Nexus 中关闭暂存仓库。在关闭之前,你可以多次重新运行部署到暂存仓库的操作。但一旦关闭,它将创建一个新的暂存仓库。因此请确保关闭它,以便下一个 RC(如果需要)使用新的仓库。一切就绪后,在 Apache Nexus 上关闭暂存仓库。

  • 从 GitHub 生成预发布说明,用于后续的投票。

前往发布页面,点击 "Draft a new release" 按钮,页面将跳转到新页面以准备发布。

填写表单要求的所有必要信息。在表单底部,勾选 "This is a pre-release" 复选框。最后,点击 "Publish release" 按钮完成此步骤。

注意:预发布说明用于投票 purposes。它会被标记为 Pre-release 标签。在所有投票工作(开发和社区)完成后,不要忘记取消勾选 "This is a pre-release" 复选框。预发布版本来自 vx.y.z-rcN 标签,最终版本应来自 vx.y.z 标签。

对发布候选版本投票

发布投票在 Apache Kyuubi 开发者邮件列表上进行。

  • 如果可能,在邮件中附上发布说明的草稿。
  • 建议以 UTC 格式表示投票截止时间。
  • 确保邮件为纯文本格式,且链接正确无误。

注意:你可以通过运行 build/release/script/dev_kyuubi_vote.sh 脚本自动生成用于开发者邮件列表的投票邮件内容。

投票完成后,你还需要发送一封包含投票结果汇总的邮件,主题格式类似 [VOTE][RESULT] Release Apache Kyuubi …

完成发布

请小心!

此步骤不可逆,因此请确保你选择了正确的暂存仓库。一旦将构件移入发布目录,就无法移除。

投票通过后,为了将二进制文件上传到 Apache 镜像,你需要将二进制文件从 dev 目录(投票应在该目录下进行)移动到 release 目录。这种"移动"操作是你向实际发布目录添加内容的唯一方式。(注意:只有 PMC 成员才能移动到 release 目录)

将 "dev" 中的子目录移动到 "release" 中对应的目录。如果你已将签名密钥添加到 KEYS 文件中,请同时更新发布副本。

build/release/release.sh finalize

请验证 https://www.apache.org/dist/kyuubi/ 中的资源是否已存在。资源可能需要一段时间才会显示出来,之后将通过 Apache 网络进行镜像分发。

对于 Maven Central 仓库,你可以从 Apache Nexus Repository Manager 进行发布。登录后,打开「Staging Repositories」,找到已通过投票的仓库,选中并点击「Release」,然后确认。如果成功,它将出现在 https://repository.apache.org/content/repositories/releases/org/apache/kyuubi/ 之下,同时也会出现在 https://repository.apache.org/content/groups/maven-staging-group/org/apache/kyuubi/ 之下(请查找正确的发布版本)。一段时间后,这将自动同步到 Maven Central。

推广发布

更新网站

Fork 并克隆 Apache Kyuubi 网站

  1. 在 src/zh/news/、src/en/news/ 中添加一个新的 Markdown 文件
  2. 在 src/zh/release/、src/en/release/ 中添加一个新的 Markdown 文件
  3. 更新 hugo.toml 中 [params] 部分定义的 releases。

创建公告

一切就绪后,在网站上创建公告,然后向邮件列表发送邮件。你可以通过 build/release/script/announce.sh 自动生成公告。邮件列表包括:announce@apache.org、dev@kyuubi.apache.org、user@spark.apache.org。

请注意,你必须使用 apache.org 邮箱向 announce@apache.org 发送公告。

请享用一杯你喜欢的饮品,并祝贺你完成了 Kyuubi 的发布。

删除已废弃的候选版本 dist 仓库目录

最后,删除已废弃的 dist 仓库目录。

cd work/svn-dev
svn delete https://dist.apache.org/repos/dist/dev/kyuubi/{RELEASE_TAG} \
  --username "${ASF_USERNAME}" \
  --password "${ASF_PASSWORD}" \
  --message "Remove deprecated Apache Kyuubi ${RELEASE_TAG}"

保持其他构件的最新状态

评论

登录后参与评论

正在加载评论…