リリースマニュアル
1. はじめに
1.1 Apacheリリースドキュメント
ASFリリースプロセスを理解するには、次のリンクを参照してください。
1.2 PGP署名
Apacheリリースガイドラインに従ってリリースバージョンに署名してください。ユーザーはこれを使用して、ダウンロードしたバージョンが改ざんされていないかどうかを判断することもできます。
バージョン署名用のpgp
キーを作成し、キーのUSER-IDとして\<your Apache ID>@apache.orgを使用します。
詳細については、Apacheリリース署名ドキュメント、OpenPGPによる暗号化を参照してください。
キー生成の簡単な手順:
gpg --gen-key
を使用して新しいgpg
キーを生成し、キーの長さを4096に設定し、有効期限がないように設定します。gpg --keyserver keys.openpgp.org --send-key <your key id>
を使用して、公開キーを公開キーサーバーにアップロードします。gpg --armor --export <your key id> >> gpgapachekey.txt
を使用して、公開キーをテキストファイルにエクスポートします。- 署名のために他のコミッターのキーを取得します(オプション)。
- 生成されたキーをKEYSファイルに追加します(リリースマネージャーによってsvnリポジトリにアップロードされます)。
デフォルトの公開キーを設定します。複数の公開キーがある場合は、~/.gnupg/gpg.conf
を修正してください。
例を参照してください:
[root@localhost ~]# gpg --gen-key
gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc.
...
# secret key generation directory
gpg: directory `/root/.gnupg' created
gpg: new configuration file `/root/.gnupg/gpg.conf' created
gpg: WARNING: options in `/root/.gnupg/gpg.conf' are not yet active during this run
gpg: keyring `/root/.gnupg/secring.gpg' created
gpg: keyring `/root/.gnupg/pubring.gpg' created
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?
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
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = 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.
# set USER-ID
Real name: rocketmq
Email address: rocketmq@apache.org
Comment: rocketmq
You selected this USER-ID:
"rocketmq (rocketmq) <rocketmq@apache.org>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.
...
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key 7DE280AF marked as ultimately trusted
public and secret key created and signed.
gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
pub 4096R/7DE280AF 2022-07-05
Key fingerprint = 421D C10E 9CC3 D261 9F89 C777 86BB 17AA 7DE2 80AF
uid rocketmq (rocketmq) <rocketmq@apache.org>
sub 4096R/65B9828A 2022-07-05
生成された公開キーと秘密キーのアドレス:
gpg: keyring `/root/.gnupg/secring.gpg' created
gpg: keyring `/root/.gnupg/pubring.gpg' created
生成された公開キーと秘密キーをASCII形式に変換します:
gpg --armor --output /root/gpgtest/public-key.txt --export 7DE280AF
gpg --armor --output /root/gpgtest/private-key.txt --export-secret-keys 7DE280AF
キーリストを表示します:
[root@localhost ~]# gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub 4096R/7DE280AF 2022-07-05
uid rocketmq (rocketmq) <rocketmq@apache.org>
sub 4096R/65B9828A 2022-07-05
公開キーを公開キーサーバーにアップロードします
[root@localhost gpgtest]# gpg --keyserver keys.openpgp.org --send-key 7DE280AF
gpg: sending key 7DE280AF to hkp server keys.openpgp.org
1.3 POM設定
ASF NexusリポジトリにバージョンをデプロイするようにPOMファイルを構成します。
① Apache POM継承のデフォルト設定を追加します
<parent>
<groupId>org.apache</groupId>
<artifactId>apache</artifactId>
<version>XX</version>
</parent>
② Maven構成ファイルsettings.xml
にキー情報を追加します。
<settings>
<profiles>
<profile>
<id>signed_release</id>
<properties>
<mavenExecutorId>forked-path</mavenExecutorId>
<gpg.keyname>yourKeyName</gpg.keyname>
<deploy.url>https://dist.apache.org/repos/dist/dev/rocketmq/</deploy.url>
</properties>
</profile>
</profiles>
<servers>
<!-- To publish a snapshot of some part of Maven -->
<server>
<id>apache.snapshots.https</id>
<username>yourApacheID</username>
<!-- Use the password encryption by maven -->
<password>yourApachePassword</password>
</server>
<!-- To stage a release of some part of Maven -->
<server>
<id>apache.releases.https</id>
<username>yourApacheID</username>
<password>yourApachePassword</password>
</server>
<server>
<id>gpg.passphrase</id>
<passphrase>yourKeyPassword</passphrase>
</server>
</servers>
</settings>
gpg.passphrase
を暗号化するには、Mavenのパスワード暗号化機能を使用することをお勧めします。
③ アーティファクトをビルドして署名します
mvn clean install -Papache-release
1.4 問題への対処
このリリースバージョンに関連するJIRAの問題とGitHubの問題を解決します。
MQVersionがリリースバージョンと一致していることを確認してください。
1.5 リリースノート
RocketMQ JIRAを通じてリリースノートを生成し、rocketmq-siteにプッシュし、バージョンの投票メールへのリンクを追加します。
2. ソースリリースをビルドする
Maven Releaseプラグインバージョンリリースプラグインを使用して、アーティファクトをASF Nexusステージングリポジトリにリリースし、バージョン検証とバージョン投票の後、Apache SVNバージョンリポジトリにコピーします。
2.1 RocketMQバージョンを確認する
MQVersionのバージョンを確認し、release-4.5.0
形式と一致しない場合、または一貫性がない場合は正しい形式に変更し、develop
ブランチにプッシュします。
public static final int CURRENT_VERSION = Version.V4_5_0.ordinal();
2.2 ASF Nexusリポジトリでのステージング
develop
ブランチに切り替え、このバージョンに関連するすべてのGitHub PRがマージされていることを確認します。
① pom.xml
ファイルを構成します
<scm>
<url>git@github.com:apache/rocketmq.git</url>
<connection>scm:git:git@github.com:apache/rocketmq.git</connection>
<developerConnection>scm:git:git@github.com:apache/rocketmq.git</developerConnection>
<tag>rocketmq-all-x.x.x</tag>
</scm>
② maven release プラグイン
mvn release:clean
mvn release:prepare
mvn release:perform
このプロセスに従って、生成されたアーティファクトをステージングリポジトリに配置します。:
mvn clean release:clean
:失敗したビルドと破棄されたバージョンをクリアします。mvn release:prepare -Psigned_release -Darguments="-DskipTests"
:SCM
プロパティに基づいてタグを更新します。mvn -Psigned_release release:perform -Darguments="-DskipTests"
:生成されたアーティファクトをNexusリポジトリにステージングします。-DdryRun=true
パラメーターを追加して、ドライランを実行できます。
上記の手順を完了すると、ローカルブランチのtarget
ディレクトリまたはNexusステージングリポジトリに、プレリリース版アーティファクトが見つかります。
ソースコードバージョンのみをリリースするには、ソースコードと関連するjarファイルのみを保持し、Nexus GUIのdelete
オプションを使用して他のアーティファクトを削除します。
2.3 rcバージョンファイル
プレリリースバージョンの投票が承認される前に、/dev/rocketmqでステージングされ、
x.x.x-rcx/
ディレクトリに保存されます。次のファイルが必要です。:rocketmq-all-x1.x2.x3-bin-release.zip
rocketmq-all-x1.x2.x3-bin-release.zip.asc
rocketmq-all-x1.x2.x3-bin-release.zip.sha512
rocketmq-all-x1.x2.x3-source-release.zip
rocketmq-all-x1.x2.x3-source-release.zip.asc
rocketmq-all-x1.x2.x3-source-release.zip.sha512
gpg
コマンドを使用して署名ファイルと検証ファイルを生成します:
asc
ファイルを生成するgpg --clearsign rocketmq-all-x1.x2.x3-bin-release.zip
gpg --clearsign rocketmq-all-x1.x2.x3-source-release.zipsha512
ファイルを生成するgpg --print-md SHA512 rocketmq-all-x1.x2.x3-bin-release.zip > rocketmq-all-x1.x2.x3-bin-release.zip.sha512
gpg --print-md SHA512 rocketmq-all-x1.x2.x3-source-release.zip > rocketmq-all-x1.x2.x3-source-release.zip.sha512
ソースコードバージョンとバイナリバージョンは、RocketMQ Docker Buildを容易にするために、rocketmq-all
で始める必要があります。
2.4 ロールバックと再試行
ステージングプロセスに問題がある場合は、次のプロセスに従ってロールバックします。
手順2.2で作成したタグを削除します
すべてのタグをリストし、最後に作成されたタグを見つけます
git tag -ln
ローカルリポジトリからタグを削除します
git tag -d rocketmq-all-x1.x2.x3
GitHubに更新をプッシュします
git push origin :refs/tags/rocketmq-all-x1.x2.x3
手順2.2から開発ブランチのコミットレコードを削除します
gitログをリストします
git log
最新のコミットレコードを見つけて、次のようにラベルを付けます。
des1[maven-release-plugin]prepare release rocketmq-all-4.9.2]
des2[maven-release-plugin]prepare for next development iteration]
コミットを削除します
git reset --hard commit-id
git push origin HEAD --force
Nexusでロールバックするバージョンを削除します
手順2.1に戻ってやり直します
3. バイナリリリースをビルドする
バイナリバージョンとソースコードバージョンは同じコードブランチからビルドされますが、オペレーティングシステムのバージョンに注意する必要があります。
netty tc-native
などの一部の依存関係は、オペレーティングシステムに敏感です。
- プレリリースバージョンブランチをチェックアウトしたことを確認してください
- すべての単体テストが
mvn clean install
で合格することを確認します - すべての統合テストが
mvn clean install -Pit-test
で合格することを確認します
ビルドが成功したら、.ascファイルと.sha512ファイルも生成する必要があります。検証と投票後、最終的にsvnリポジトリにコピーします。
4. バージョン検証
4.1 バイナリリリース検証チェックリスト
- ビルド依存関係のオペレーティングシステムを確認します。netty-tcnativeはオペレーティングシステムに敏感です
- ライセンスがApache V2であることを確認してください
- サードパーティの依存関係が導入された場合は、NOTICEを更新します
- 圧縮ファイルを展開して、バージョンが正しいことを確認します
- ASC署名、SHA512ダイジェストを検証します
- クイックスタートを実行して、ネームサーバーとブローカーを起動します
- clusterListコマンドを実行して、バージョンが正しいことを確認します
- nohup.outファイルがないことを確認します
4.2 ソースリリース検証チェックリスト
- ライセンスがApache V2であることを確認してください
- サードパーティの依存関係が導入された場合は、NOTICEを更新します
- 圧縮ファイルを展開して、バージョンが正しいことを確認します
- ASC署名、SHA512ダイジェストを検証します
- ソースコードをコンパイルし、クイックスタートを実行してネームサーバーとブローカーを起動します。
- clusterListコマンドを実行して、バージョンが正しいことを確認します。
4.3 検証ツール
以下の手順に従って、GPG署名とSHA512ダイジェストを検証します。
リリースパッケージ、
.asc
ファイル、および.sha512
ファイルをダウンロードします。Unixシステムで、次のコマンドを実行します:
for file in `find . -type f -iname '*.asc'`
do
gpg --verify ${file}
doneまたは
gpg --verify rocketmq-all-%version-number%-source-release.zip.asc rocketmq-all-%version-number%-bin-release.zip
Good signature
と表示された場合、署名は正しいです。gpg: Good signature from ... gpg: Signature made ...
SHA512に基づいてバージョンの整合性を検証します。
gpg --print-md SHA512 rocketmq-all-%version-number%-source-release.zip
gpg --print-md SHA512 rocketmq-all-%version-number%-bin-release.zip
5. ステージングリポジトリを閉じる
- プレリリースバージョンがチェックリスト検証を完了したら、Nexusステージングリポジトリを閉じて、バージョン選定の準備をします。
- Nexusで
orgapacherocketmq-XXX
保留中のリリースバージョンを選択し、Close
アイコンをクリックしてステージングリポジトリを閉じます。 - 閉じる前に、Nexusは一連の署名検証とテキストチェックを実行します。
- 検証が成功した場合、Nexusはリポジトリを閉じ、「選定メール」で「The staging repo」とマークされたステージングリポジトリのURLを提供します。
- 検証が失敗した場合は、問題を修正し、ロールバックして、リリースプロセスを再実行します。
- 上記の作業がすべて完了したら、SVNを使用して/dev/rocketmq Apacheリモートリポジトリにコピーします。
6. バージョン選定
RocketMQコミュニティは、dev@rocketmq.apache.orgメーリングリストを通じてバージョン選定を実施します。
投票プロセスを参照して、Apacheの投票プロセスを理解してください。
6.1 コミュニティ投票
メーリングリスト:dev list
メールの件名:[VOTE]: Release Apache RocketMQ \<release-version> RC\<RC Number>
RocketMQコミュニティの皆様,
これは、Apache RocketMQの\<release version>の投票です。
${RocketMQの簡単な紹介とこのリリースの機能。}
成果物
https://dist.apache.org/repos/dist/dev/rocketmq/${release version}
ステージングリポジトリ
https://repository.apache.org/content/repositories/orgapacherocketmq-XXX/
リリースのGitタグ
\<GitHubリポジトリのタグへのリンク>
リリースタグのハッシュ
\<リリースタグのハッシュ値>
リリースノート
\<rocketmqリリースノートへのリンクを挿入>
成果物はキー:\<署名キーのID>で署名されています。キーファイルにあります。
https://dist.apache.org/repos/dist/dev/rocketmq/KEYS
投票は、少なくとも72時間、または必要な投票数に達するまで実施されます。
適切に投票してください
[ ]+1 承認
[ ]+0 中立
[ ]-1 理由付きで反対
よろしくお願いいたします。
Apache RocketMQチーム
リリースタグのハッシュ:コミットIDを使用できます。
6.2 結果発表
72時間後、少なくとも3票の賛成票があり、反対票がない場合は、次のメールを送信して、バージョンのリリースを祝います。
メールの件名:[RESULT][VOTE]: Release Apache RocketMQ \<release-version> RC\<RC Number>
RocketMQコミュニティの皆様,
Apache RocketMQ
<release version>
の投票は終了し、合格しました。[number]binding +1s,[number]non-binding +1s および 0 または -1 はありません。Binding votes +1s
ユーザー名(Apache ID)
ユーザー名(Apache ID)
ユーザー名(Apache ID)
....
Non-binding votes +1s
ユーザー名(Apache ID)
....
リリースは間もなく公開されます。
よろしくお願いいたします。
Apache RocketMQチーム
投票が合格しなかった場合は、問題を修正し、ロールバックし、RC番号を増やし、リリースプロセスを再開し、バージョン投票プロセスを再開します。
メールの件名を更新:[RESTART][VOTE][#]: Release Apache RocketMQ \<release-version> RC\<RC Number>
7. バージョンリリース
Apache RocketMQ PMCの投票が合格した後、バージョンをMaven NexusリポジトリとApacheバージョンリポジトリにリリースします。
- Nexusリポジトリに公開するには、ステージングエリアでorgapacherocketmq-XXXを選択し、
Release
アイコンをクリックして公開します。 - Apacheバージョンリポジトリに公開するには、SVNを使用してバージョンを/release/rocketmqにコピーします。
- Apache RocketMQの
develop
ブランチをmaster
ブランチにマージします。 - Releases · apache/rocketmqにリリースノートを追加します。
- 新しいブランチを作成し、
release-x.x.x
という名前を付けます。 - apache/rocketmq-site公式サイトホームページを更新します。
- リリースノートを追加します。 4.9.3 リリースノートを参照してください。
- リリースノートを更新します。 4.9.3 のドキュメント更新を参照してください。
8. バージョン発表
メーリングリスト:announce@apache.org, users@rocketmq.apache.org,
private@rocketmq.apache.org, dev@rocketmq.apache.org
メールの件名: [ANNOUNCE] Release Apache RocketMQ \<release-version>
皆様
Apache RocketMQチームは、Apache RocketMQ \<release version>.
${RocketMQの簡単な紹介とこのリリースの機能。}
のリリースを発表いたします。
Apache RocketMQに関する詳細は、以下をご覧ください。
https://rocketmq.dokyumento.jp/
https://dist.apache.org/repos/dist/release/rocketmq/${release-version}
\<rocketmqリリースノートへのリンクを挿入>
よろしくお願いいたします。
Apache RocketMQチーム