拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Apache DolphinScheduler 版本发布全流程实战指南:从 GPG 签名到社区投票与公告

Apache DolphinScheduler 版本发布全流程实战指南从 GPG 签名到社区投票与公告【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler本指南以 Apache DolphinScheduler 官方《Release Guide》位于 docs/docs/en/contribute/release.md为骨架完整覆盖一次 Apache 版本发布所需的全部环节环境准备与 GPG 密钥签发、Maven Central 发布、SVN 制品上传、社区投票、公告发布与后续清理。读完本文你将能够独立担任一次 DolphinScheduler 版本发布的 Release Manager并掌握仓库内 tools/release 自动化工具与 发布相关 Workflow 的实际用法。Apache DolphinScheduler 是 Apache 软件基金会ASF旗下的顶级项目其版本发布必须严格遵循 Apache 发布规范所有发布候选Release Candidate都需要经过 PGP 签名、SHA-512 校验、社区投票通过后才能进入官方发行渠道。以下流程以GnuPG-2.1.23、Maven和SVN为例展开命令中的占位符VERSION表示你计划发布的版本号。发布前准备仅首次发布需要发布前准备工作的绝大多数属于一次性工作只有在你第一次发布时才需要执行。如果你之前已经发布过版本可以直接跳过本节进入正式发布。环境检查确保本机满足以下两个基础条件缺一不可# 需要 JDK 1.8 及以上 java -version # 需要 Maven mvn -versionGPG 配置GPGGNU Privacy Guard用于对发布制品做数字签名是 Apache 发布流程中验证制品完整性与可信度的核心手段。安装 GPG从 GnuPG 官网下载安装包。GnuPG 1.x 与 2.x 的命令略有差异以下以GnuPG-2.1.23为例。安装完成后检查版本gpg --version创建密钥GnuPG 2.x 使用gpg --full-gen-keyGnuPG 1.x 使用gpg --gen-key按交互提示完成密钥创建。注意请使用 Apache 邮箱及对应的密码创建密钥因为发布相关操作与 Apache LDAP 账号体系绑定。以下是完整的交互过程示例gpg (GnuPG) 2.0.12; Copyright (C) 2009 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Please select what kind of key you want: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only) Your selection? 1 RSA keys may be between 1024 and 4096 bits long. What keysize do you want? (2048) 4096 Requested keysize is 4096 bits Please specify how long the key should be valid. 0 key does not expire n key expires in n days nw key expires in n weeks nm key expires in n months ny key expires in n years Key is valid for? (0) Key does not expire at all Is this correct? (y/N) y GnuPG needs to construct a user ID to identify your key. Real name: ${Input username} Email address: ${Input email} Comment: ${Input comment} You selected this USER-ID: ${Inputed username} (${Inputed comment}) ${Inputed email} Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O You need a Passphrase to protect your secret key. # 输入你的 Apache 邮箱密码检查生成的密钥gpg --list-keys执行结果pub 4096R/85E11560 2019-11-15 uid ${Username} (${Comment}) {Email} sub 4096R/A63BC462 2019-11-15其中85E11560是公钥 ID。GPG 2.0 之后输出格式有所变化pub rsa4096 2023-07-01 [SC] 1234ABCD5678EFGH9012IJKL3456MNOP7890QRST uid [ultimate] ${用户名} {邮件地址} sub rsa4096 2023-07-01 [E]此时公钥 ID 是1234ABCD5678EFGH9012IJKL3456MNOP7890QRST。上传公钥到密钥服务器gpg --keyserver hkp://pool.sks-keyservers.net --send-key 85E11560pool.sks-keyservers.net是公钥服务器池中的随机一个各服务器之间会自动同步因此选择任意一个均可备选服务器命令为gpg --keyserver hkp://keyserver.ubuntu.com --send-key YOUR_KEY_ID。公钥上传后投票者才能用它验证你的发布制品签名。配置 Apache Maven Central 仓库设置settings-security.xml与settings.xmlApache 要求对 Maven 配置文件中的密码做加密处理参考 Maven 官方加密指南。首先创建settings-security.xml然后修改~/.m2/settings.xml加入 Apache 的 Snapshots 与 Releases 仓库凭据settings servers server idapache.snapshots.https/id username !-- APACHE LDAP username -- /username password !-- APACHE LDAP encrypted password -- /password /server server idapache.releases.https/id username !-- APACHE LDAP username -- /username password !-- APACHE LDAP encrypted password -- /password /server /servers /settings其中username是你的 Apache LDAP 用户名password是加密后的 LDAP 密码。这两个 server 的 id 对应发布构建中apache-releaseprofile 内的仓库发布配置后续mvn release:perform会上传制品到 Apache staging 仓库正是依赖这里的凭据。正式发布检查 release-docs相比上一次发布如果依赖或版本有变化当前发布的release-docs需要更新到最新dolphinscheduler-dist/release-docs/LICENSEdolphinscheduler-dist/release-docs/NOTICEdolphinscheduler-dist/release-docs/licenses这些文件随发布的源码包与二进制包一起分发是 Apache 对第三方依赖许可合规审查的核心依据。仓库中dolphinscheduler-dist/release-docs/licenses/目录下存放了每个第三方依赖的 LICENSE 副本。设置发布环境变量发布流程中会反复用到发布版本、你的 GitHub 用户名、Apache 用户名等建议先存入 bash 变量VERSIONTHE-VERSION-YOU-RELEASE SOURCE_CODE_DIRYOUR-SOURCE-CODE-ROOT-DIR # 源码根目录即父 pom.xml 所在位置而非二进制包目录 GH_USERNAMEYOUR-GITHUB-USERNAME GH_REMOTEGITHUB-REMOTE # 大多数情况下使用 upstream 或 origin取决于你的发布环境 A_USERNAMEYOUR-APACHE-USERNAME SVN_DIRPATH-TO-SVN-ROOT # 存放从 SVN checkout 的二进制包其下会自动创建 /dolphinscheduler/dev 与 /dolphinscheduler/release 子路径设置环境变量后bash 中可直接使用变量。例如git clone -b ${VERSION}-prepare https://github.com/apache/dolphinscheduler.git会把${VERSION}自动替换为实际版本号。但在非 bash 步骤如投票邮件中必须手动替换VERSION文档使用VERSION而非${VERSION}正是为了提醒发布经理手工修改。更新文档或代码中的版本号Maven 发布前需要更新一批版本号以发布版本VERSION为例代码中的版本sql脚本t_ds_version表需更新为VERSIONdolphinscheduler_mysql.sql当前示例值为3.3.0dolphinscheduler_postgresql.sqldolphinscheduler_h2.sqlupgrade若本次新增了 DDL 或 DML需要添加VERSION_schema升级脚本没有新增则可跳过soft_version需更新为VERSIONdeploy/docker/.envHUB改为apacheTAG改为VERSIONdeploy/kubernetes/dolphinschedulerChart.yamlappVersion与version更新为 x.y.zvalues.yamlimage.tag更新为 x.y.zconfig/install-plugins.shdev-SNAPSHOT更新为 x.y.z仓库中 install-plugins.sh 的默认插件版本即为dev-SNAPSHOT发布时必须改为具体版本文档中的版本将docs目录下所有version占位符pom除外替换为x.y.z新增历史版本docs/docs/en/history-versions.md 与 docs/docs/zh/history-versions.md为x.y.z添加新版本与链接docs/configs/docsdev.js将/dev/改为/x.y.z/。不要修改文件名站点工具会自动处理。VERSION是占位字符串与VERSIONTHE-VERSION-YOU-RELEASE中设置的版本一致。合并主仓库 dev 分支后再合并网站的 master 分支相关 PR 合入后即生效。修正 NOTICE 文件中的年份NOTICE 文件第二行的年份需要更新为当前年份检查以下文件dolphinscheduler-dist/release-docs/NOTICENOTICEMaven 发布Maven 发布预检Dry Run基于 prepare 分支创建 release 分支cd ${SOURCE_CODE_DIR} git checkout -b ${VERSION}-release ${VERSION}-prepare git push ${GH_REMOTE} ${VERSION}-release export GPG_TTY$(tty)如果在没有源码的远程主机上发布需要先执行git clone -b ${VERSION}-prepare https://github.com/apache/dolphinscheduler.git克隆源码并确保设置GH_REMOTEorigin以保证所有命令正常工作。执行预检dry run验证发布配置是否正确mvn release:prepare -Papache-release,release -Darguments-Dmaven.test.skiptrue -Dspotless.skiptrue -Dspotless.check.skiptrue -Dmaven.javadoc.skiptrue -DautoVersionSubmodulestrue -DdryRuntrue -Dusername${GH_USERNAME}参数说明-Prelease选择 release profile会打包所有源码、jar 文件与可执行二进制包-DautoVersionSubmodulestrue版本号只输入一次自动应用到所有子模块-DdryRuntrue预演模式不实际生成/提交新版本号与新 tagMaven 发布正式 Prepare先清理本地预检信息mvn release:clean然后正式执行发布准备mvn release:prepare -Papache-release,release -Darguments-Dmaven.test.skiptrue -Dspotless.skiptrue -Dspotless.check.skiptrue -Dmaven.javadoc.skiptrue -DautoVersionSubmodulestrue -DpushChangesfalse -Dusername${GH_USERNAME}该命令与预演基本一致只是删除了-DdryRuntrue参数。-DpushChangesfalse表示不自动把修改后的版本号与 tag 提交到 GitHub。如果遇到 git 报错Please tell me who you are.需要先配置 git 身份git config --global user.email youexample.com和git config --global user.name Your Name。确认本地文件无误后手动提交到 GitHubgit push -u ${GH_REMOTE} ${VERSION}-release git push ${GH_REMOTE} --tagsNote1该步骤的密码应使用 GitHub token原生密码已不再支持token 创建方式见 GitHub 官方文档。Note2命令执行完成后会自动生成release.properties文件和*.Backup文件后续命令会用到不要删除它们。Maven 发布 Deploymvn release:perform -Papache-release,release -Darguments-Dmaven.test.skiptrue -Dspotless.skiptrue -Dspotless.check.skiptrue -Dmaven.javadoc.skiptrue -Dmaven.deploy.skipfalse -DautoVersionSubmodulestrue -Dusername${GH_USERNAME}命令执行完毕后待发布版本会自动上传到 Apache staging 仓库。登录 Apache staging repositories 页面使用 Apache LDAP 账号可以看到上传的版本Repository列的内容就是${STAGING.REPOSITORY}。点击Close告知 Nexus 构建已完成——只有 Close 之后该版本才可用。如果 GPG 签名有问题Close会失败可通过Activity页签查看失败原因。SVN 制品上传Apache 发布要求把源码包、二进制包与可执行包同步到官方 SVN 分发目录供社区下载与校验。Checkout Dolphinscheduler 发布目录SVN_DIR_DEV${SVN_DIR}/dolphinscheduler/dev SVN_DIR_RELEASE${SVN_DIR}/dolphinscheduler/release # 可选仅当 SVN 根路径不存在时 mkdir -p ${SVN_DIR_DEV} # 首次从该路径 checkout svn --username${A_USERNAME} co https://dist.apache.org/repos/dist/dev/dolphinscheduler ${SVN_DIR_DEV} # 或 SVN 目录已存在并已 checkout 过时执行 update svn --username${A_USERNAME} update ${SVN_DIR_DEV}注意首次 checkout 可能需要几分钟同步到镜像因为它会下载全部文件。导出新 GPG 密钥到 KEYS可选仅当你是首次使用该 GPG 密钥发布包括首次发布或更换了密钥时需要执行。该步骤需要切换到另一个工作目录因为需要在 release 目录中 checkout 并修改 KEYS# 可选仅当 SVN 根路径不存在时 mkdir -p ${SVN_DIR_RELEASE} cd ${SVN_DIR_RELEASE} svn --username${A_USERNAME} co https://dist.apache.org/repos/dist/release/dolphinscheduler # 把 YOUR-GPG-KEY-ID 替换为你的密钥 ID gpg -a --export YOUR-GPG-KEY-ID KEYS svn add * svn --username${A_USERNAME} commit -m new key YOUR-GPG-KEY-ID add添加发布内容到 SVN按版本号创建目录并把源码包、二进制包和可执行二进制包移动到 SVN 工作目录mkdir -p ${SVN_DIR_DEV}/${VERSION} # 复制到 SVN cp -f ${SOURCE_CODE_DIR}/dolphinscheduler-dist/target/*.tar.gz ${SVN_DIR_DEV}/${VERSION} cp -f ${SOURCE_CODE_DIR}/dolphinscheduler-dist/target/*.tar.gz.asc ${SVN_DIR_DEV}/${VERSION} # 生成 SHA-512 校验文件 cd ${SVN_DIR_DEV}/${VERSION} shasum -a 512 apache-dolphinscheduler-${VERSION}-src.tar.gz apache-dolphinscheduler-${VERSION}-src.tar.gz.sha512 shasum -b -a 512 apache-dolphinscheduler-${VERSION}-bin.tar.gz apache-dolphinscheduler-${VERSION}-bin.tar.gz.sha512 # 校验 sha512 shasum -c apache-dolphinscheduler-${VERSION}-src.tar.gz.sha512 shasum -c apache-dolphinscheduler-${VERSION}-bin.tar.gz.sha512 # 校验 gpg 签名 gpg --verify apache-dolphinscheduler-${VERSION}-src.tar.gz.asc gpg --verify apache-dolphinscheduler-${VERSION}-bin.tar.gz.asc # 提交到 Apache SVN cd ${SVN_DIR_DEV} svn add ${VERSION} svn --username${A_USERNAME} commit -m release ${VERSION}如果找不到asc文件需要手动创建 gpg 签名gpg --armor --detach-sign --digest-algoSHA512 apache-dolphinscheduler-${VERSION}-bin.tar.gzgpg --armor --detach-sign --digest-algoSHA512 apache-dolphinscheduler-${VERSION}-src.tar.gz检查发布的文件检查源码包解压apache-dolphinscheduler-VERSION-src.tar.gz检查以下项目源码包是否因包含非必要文件而过大致使体积异常LICENSE和NOTICE文件是否存在NOTICE文件中的年份是否正确只包含文本文件不含二进制文件所有源文件都有 ASF 头license header代码可编译并通过单元测试mvn install发布内容与版本控制中打 tag 的内容一致用diff -r verify_dir tag_dir对比是否存在多余文件或文件夹例如空文件夹检查二进制包解压apache-dolphinscheduler-VERSION-bin.tar.gz检查以下项目LICENSE和NOTICE文件是否存在NOTICE文件中的年份是否正确检查第三方依赖许可软件许可需兼容所有软件许可都在LICENSE中提及所有第三方依赖的许可文件都在licenses文件夹下若依赖 Apache 许可且自身带NOTICE文件该NOTICE需合并进发布包的NOTICE文件社区投票VOTE更新 Release Notes投票邮件需要附带 release note 链接因此投票邮件发出前必须先创建 GitHub Release Note。推荐在tools/release目录下用命令自动生成 changelogpython release.py changelog也可以手动创建git log --pretty- %s PREVIOUS-RELEASE-SHA..CURRENT-RELEASE-SHA changelog.md部分日志可能不准确需要自行筛选然后分类粘贴到 GitHub release note 页面。仓库中 tools/release/release.py 的get_changelog会通过 GitHub REST API 查询指定 milestone 下所有已合并的 PR见 github/pull_request.py并按dsip feature bug improvement document chore的优先级自动分类生成 changelog见 github/changelog.py。运行前需设置环境变量export GH_ACCESS_TOKENYOUR-GITHUB-TOKEN-WITH-REPO-ACCESS export GH_REPO_MILESTONEYOUR-MILESTONE并安装依赖python -m pip install -r requirements.txt依赖为requests~2.28与GitPython~3.1见 requirements.txt。投票流程DolphinScheduler 社区投票向devdolphinscheduler.apache.org发送投票邮件。PMC 在投票前需要按文档检查版本的正确性。至少经过 72 小时并且获得至少 3 个1 且无 -1的 PMC 成员投票才能进入下一阶段。投票结果同样需要发送到devdolphinscheduler.apache.org。邮件模板投票邮件模板标题[VOTE] Release Apache DolphinScheduler VERSION正文Hello DolphinScheduler Community, This is a call for vote to release Apache DolphinScheduler version VERSION Release notes: https://github.com/apache/dolphinscheduler/releases/tag/VERSION The release candidates: https://dist.apache.org/repos/dist/dev/dolphinscheduler/VERSION/ Maven 2 staging repository: https://repository.apache.org/content/repositories/STAGING.REPOSITORY/org/apache/dolphinscheduler/ Git tag for the release: https://github.com/apache/dolphinscheduler/tree/VERSION Release Commit ID: https://github.com/apache/dolphinscheduler/commit/SHA-VALUE Keys to verify the Release Candidate: https://downloads.apache.org/dolphinscheduler/KEYS Look at here for how to verify this release candidate: https://github.com/apache/dolphinscheduler/blob/dev/docs/docs/en/contribute/release.md The vote will be open for at least 72 hours or until necessary number of votes are reached. Please vote accordingly: [ ] 1 approve [ ] 0 no opinion [ ] -1 disapprove with the reason Checklist for reference: [ ] Download links are valid. [ ] Checksums and PGP signatures are valid. [ ] Source code artifacts have correct names matching the current release. [ ] LICENSE and NOTICE files are correct for each DolphinScheduler repo. [ ] All files have license headers if necessary. [ ] No compiled archives bundled in source archive.投票结果模板标题[RESULT][VOTE] Release Apache DolphinScheduler VERSION正文The vote to release Apache DolphinScheduler VERSION has passed.Here is the vote result, 4 PMC member 1 votes: xxx xxx xxx xxx 1 community 1 vote: xxx Thanks everyone for taking time to check this release and help us.公告发布处理发布包并删除发布分支投票通过后将发布候选从 dev 目录移动到 release 目录# 移动到 release 目录 svn mv -m release ${VERSION} https://dist.apache.org/repos/dist/dev/dolphinscheduler/${VERSION} https://dist.apache.org/repos/dist/release/dolphinscheduler/ # 删除旧版本目录Apache 只保留当前版本 svn delete -m remove old release https://dist.apache.org/repos/dist/release/dolphinscheduler/PREVIOUS-RELEASE-VERSION然后在 Apache staging repositories 中找到 DolphinScheduler点击Release。更新文档发送公告邮件前网站需要先就绪。以发布版本VERSION为例需要做以下更新PR 合并后立即生效仓库apache/dolphinscheduler-websiteconfig/download.json添加VERSION发布包的下载入口scripts/conf.sh向变量DEV_RELEASE_DOCS_VERSIONS添加新版本VERSION的键值对仓库apache/dolphinschedulerdev 分支docs/configs/site.jsdocsLatest更新为VERSIONdocs0en-us/zh-cn两处的text更新为latest(VERSION)docs/configs/index.md.jsx添加VERSION: docsxyzConfig并为新的docsxyzConfig添加importdocs/docs/en/history-versions.md 与 docs/docs/zh/history-versions.md添加新VERSION的发布文档.github/ISSUE_TEMPLATE/bug-report.ymlDolphinScheduler 的 bug-report issue 模板底部有Version下拉选择发布后需要把新VERSION加入该列表发布 Docker 镜像与 Helm Chart仓库提供了两个自动发布 Workflowpublish-docker.github/workflows/publish-docker.yaml自动发布 Docker 镜像以及publish-helm-chart.github/workflows/publish-helm-chart.yaml自动发布 Helm Chart 到 Docker Hub。创建 release 节点后Workflow 会被自动触发on: release事件见 workflow 头部配置发布者只需观察这两个 Workflow 是否完成完成后在本地拉取 Docker 镜像验证功能是否正常。从 workflow 配置可见release 事件触发时会将HUB设为apache、DOCKER_TAG设为github.event.release.tag_name并执行./mvnw -B clean deploy -Dmaven.test.skip -Dspotless.skiptrue -Ddocker.tag... -Ddocker.hubapache -Pdocker,staging完成镜像构建与推送。向社区发送公告邮件发布流程全部结束后发送公告邮件发送至devdolphinscheduler.apache.org抄送announceapache.org。注意邮件格式必须使用纯文本格式。公告邮件模板标题[ANNOUNCE] Release Apache DolphinScheduler VERSION正文Hi all, We are glad to announce the release of Apache DolphinScheduler VERSION. Once again I would like to express my thanks to your help. Dolphin Scheduler is a distributed and easy-to-extend visual workflow scheduler system, dedicated to solving the complex task dependencies in data processing, making the scheduler system out of the box for data processing. Download Links: https://dolphinscheduler.apache.org/en-us/download Release Notes: https://github.com/apache/dolphinscheduler/releases/tag/VERSION Website: https://dolphinscheduler.apache.org/ DolphinScheduler Resources: - Issue: https://github.com/apache/dolphinscheduler/issues/ - Mailing list: devdolphinscheduler.apache.org - Documents: https://dolphinscheduler.apache.org/en-us/docs/VERSION/about/introduction删除 prepare 分支cd ${SOURCE_CODE_DIR} git push --delete ${GH_REMOTE} ${VERSION}-prepare发布新闻所有流程结束后需要在社区发布一篇新闻稿内容应包括本版本的主要目的新增功能feature、缺陷修复bugfix还是两者兼有主要新特性及其用法最好配图或 gif主要缺陷修复及其与上一版本的区别最好配图或 gif自上一版本以来的全部贡献者名单获取全部贡献者发布新闻或公告时可能需要当前版本的全部贡献者使用tools/release目录下的命令自动生成贡献者 GitHub idpython release.py contributor该命令在 tools/release/release.py 中实现先查询 milestone 下所有已合并 PR再通过 github/user.py 的User.contributors()去重提取贡献者最后按字母序拼接输出。同目录下的python release.py cherry-pick命令还可基于 milestone 自动执行git cherry-pick -x SHA便于把合入 dev 分支的 PR 同步到发布分支详见 github/git.py。发布自检清单为便于快速对照将完整流程浓缩为以下检查清单阶段关键动作验证方式环境准备JDK/Maven 就绪、GPG 密钥生成并上传公钥服务器java -version、gpg --list-keys、gpg --send-keyMaven 发布dry run 预演 →release:prepare→release:performstaging 仓库Close成功SVN 上传源码/二进制包 .asc.sha512上传 dev 目录shasum -c、gpg --verify制品检查LICENSE/NOTICE、ASF header、无二进制文件、许可合规源码包与二进制包逐项核对社区投票发送[VOTE]邮件72 小时 至少 3 个 PMC1发送[RESULT][VOTE]邮件公告SVN 迁移至 release、stagingRelease、更新站点配置Workflow 完成、公告邮件发出收尾删除 prepare 分支、发布新闻与贡献者名单git push --delete、python release.py contributor以上即为 Apache DolphinScheduler 一次完整版本发布的端到端流程。首次执行时建议严格按顺序完成 GPG 配置与 Apache Maven 仓库配置后续发布可跳过准备阶段直接复用环境变量与已发布的密钥重点关注版本号更新、制品校验与投票节奏的把控。【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门