This is an automated email from the ASF dual-hosted git repository.

liujun pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo-website.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 78a35c2  Merge pull request #83, add blog (zh-cn): Prepare an Apache 
release
78a35c2 is described below

commit 78a35c2da80266311fd072a86d8618fcddafef4f
Author: ken.lj <[email protected]>
AuthorDate: Wed Aug 8 14:25:43 2018 +0800

    Merge pull request #83, add blog (zh-cn): Prepare an Apache release
---
 blog/zh-cn/Prepare-an-Apache-release.md | 297 ++++++++++++++++++++++++++++++++
 site_config/blog.js                     |  17 +-
 2 files changed, 309 insertions(+), 5 deletions(-)

diff --git a/blog/zh-cn/Prepare-an-Apache-release.md 
b/blog/zh-cn/Prepare-an-Apache-release.md
new file mode 100644
index 0000000..28ffee3
--- /dev/null
+++ b/blog/zh-cn/Prepare-an-Apache-release.md
@@ -0,0 +1,297 @@
+## 理解Apache发布的内容和流程
+
+总的来说,Source Release是Apache关注的重点,也是发布的必须内容;而Binary 
Release是可选项,Dubbo可以选择是否发布二进制包到Apache仓库或者发布到Maven中央仓库。
+
+请参考以下链接,找到更多关于ASF的发布指南:
+
+- [Apache Release Guide](http://www.apache.org/dev/release-publishing)
+- [Apache Release Policy](http://www.apache.org/dev/release.html)
+- [Maven Release 
Info](http://www.apache.org/dev/publishing-maven-artifacts.html)
+
+## 本地构建环境准备
+
+主要包括签名工具、Maven仓库认证相关准备
+
+1. 安装GPG,参见 https://www.gnupg.org/download/index.html
+
+   - 如Mac OS
+
+    ```sh
+    $ brew install gpg
+    $ gpg --version #检查版本,应该为2.x
+    ```
+
+2. 用gpg生成key
+
+   - 根据提示,生成key
+
+    ```shell
+    $ gpg2 --full-gen-key
+    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
+         <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.
+    
+    Real name: Robert Burrell Donkin
+    Email address: [email protected]
+    Comment: CODE SIGNING KEY
+    You selected this USER-ID:
+       "Robert Burrell Donkin (CODE SIGNING KEY) <[email protected]>"
+    
+    Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
+    You need a Passphrase to protect your secret key. # 填入密码,以后打包过程中会经常用到
+    ```
+
+   - 查看key id 
+
+    ```sh
+    $ gpg --list-keys
+    pub   rsa4096/28681CB1 2018-04-26 # 28681CB1就是key id
+    uid       [ultimate] liujun (apache-dubbo) <[email protected]>
+    sub   rsa4096/D3D6984B 2018-04-26
+    
+    # 通过key id发送public key到keyserver
+    $ gpg --keyserver pgpkeys.mit.edu --send-key 28681CB1
+    # 
其中,pgpkeys.mit.edu为随意挑选的keyserver,keyserver列表为:https://sks-keyservers.net/status/,因为相互之间是自动同步的,选任意一个都可以。
+    ```
+
+   - 如果有多个public key,设置默认key
+
+    ~/.gnupg/gpg.conf
+    
+    ```proper
+    # If you have more than 1 secret key in your keyring, you may want to
+    # uncomment the following option and set your preferred keyid.
+    
+    default-key 28681CB1
+    ```
+
+3. 设置Apache中央仓库
+
+   - Dubbo项目的父pom为apache pom
+
+    ```xml
+    <parent>
+    <groupId>org.apache</groupId>
+    <artifactId>apache</artifactId>
+    <version>19</version>
+    </parent>
+    ```
+
+   - 添加以下内容到.m2/settings.xml
+
+     
所有密码请使用[maven-encryption-plugin](http://maven.apache.org/guides/mini/guide-encryption.html)加密后再填入
+
+    ```xml
+    <settings>
+    ...
+     <servers>
+       <!-- To publish a snapshot of some part of Maven -->
+       <server>
+         <id>apache.snapshots.https</id>
+         <username> <!-- YOUR APACHE LDAP USERNAME --> </username>
+         <password> <!-- YOUR APACHE LDAP PASSWORD (encrypted) --> </password>
+       </server>
+       <!-- To stage a release of some part of Maven -->
+       <server>
+         <id>apache.releases.https</id>
+         <username> <!-- YOUR APACHE LDAP USERNAME --> </username>
+         <password> <!-- YOUR APACHE LDAP PASSWORD (encrypted) --> </password>
+       </server>
+      ...
+         <!-- gpg passphrase used when generate key -->
+        <server>
+         <id>gpg.passphrase</id>
+         <passphrase><!-- yourKeyPassword --></passphrase>
+       </server>
+     </servers>
+    </settings>
+    ```
+
+   ​
+
+## 打包&上传
+
+1. 从主干分支拉取新分支作为发布分支,如现在要发布2.6.4版本,则从2.6.x拉出新分支2.6.4-release,此后2.6.4 Release 
Candidates涉及的修改及打标签等都在2.6.4-release分支进行,最终发布完成后合入主干分支。
+
+2. 首先,在2.6.4-release分支验证maven组件打包、source源码打包、签名等是否都正常工作
+
+   ```shell
+   $ mvn clean install -Papache-release
+   $ mvn deploy
+   # 将snapshot包推送到maven中央仓库,处于staging状态
+   ```
+
+3. 用maven-release-plugin发布
+
+   - 先用dryRun验证是否ok
+
+    ```shell
+    $ mvn release:prepare -Papache-release -Darguments="-DskipTests" 
-DautoVersionSubmodules=true -Dusername=YOUR GITHUB ID -DdryRun=true
+    ```
+
+   - 验证通过后,执行release:prepare
+
+    ```shell
+    $ mvn release:clean
+    $ mvn release:prepare -Papache-release -Darguments="-DskipTests" 
-DautoVersionSubmodules=true -Dusername=YOUR GITHUB ID
+    # 执行完成后:1.生成source.zip包; 2.打出tag,并推送到github仓库; 
3.分支版本自动升级为2.6.4-SNAPSHOT,并将修改推送到github仓库
+    ```
+
+   - 执行release:perform,做正式发布
+
+    ```shell
+    $ mvn -Prelease release:perform -Darguments="-DskipTests" 
-DautoVersionSubmodules=true -Dusername=YOUR GITHUB ID
+    # 所有artifacts发布到配置的远程maven中央仓库,处于staging状态
+    ```
+
+## 准备Apache发布
+
+1. 准备svn本机环境(Apache使用svn托管项目的发布内容)
+
+2. 将dubbo checkout到本地目录
+
+   ```shell
+   $ svn checkout https://dist.apache.org/repos/dist/dev/incubator/dubbo
+   # 假定本地目录为 ~/apache/incubator/dubbo
+   ```
+
+3. 当前发布版本为2.6.4,新建目录
+
+   ```shell
+   $ cd ~/apache/incubator/dubbo # dubbo svn根目录
+   $ mkdir 2.6.4
+   ```
+
+4. 添加public 
key到[KEYS](https://dist.apache.org/repos/dist/dev/incubator/dubbo/KEYS)文件。KEYS主要是让参与投票的人在本地导入,用来校验sign的正确性
+
+5. 拷贝Dubbo根目录下的source.zip包到svn本地仓库dubbo/2.6.4
+
+6. 生成sha512签名
+
+   ```shell
+   $ shasum -a 512 dubbo-incubating-2.6.4-source-release.zip >> 
dubbo-incubating-2.6.4-source-release.zip.sha512
+   ```
+
+7. 如果有binary release要同时发布
+
+   ```shell
+   # 到dubbo项目distribution的module下,执行:
+   $ mvn install
+   # target目录下,拷贝bin-release.zip以及bin-release.zip.asc到svn本地仓库dubbo/2.6.4
+   # 参考第6步,生成sha512签名
+   ```
+
+8. 提交到Apache svn
+
+   ```shell
+   $ svn status
+   $ svn commit -m 'prepare for 2.6.4 RC1'
+   ```
+
+## 验证Release Candidates
+
+验证环节包含但不限于以下内容和形式:
+
+1. Check signatures and hashes are good
+```sh
+sha512 dubbo-incubating-${release_version}-bin-release.zip.sha512
+sha512 dubbo-incubating-${release_version}-source-release.zip.sha512
+```
+
+2. Unzip dubbo-incubating-${release_version}-source-release.zip to the default 
directory and check the following:
+
+- Directory with 'incubating' in name
+  `dubbo-incubating-${release_version}-bin-release`
+  
+- DISCLAIMER exists
+
+- LICENSE and NOTICE exists and contents are good
+
+- All files and no binary files exist
+
+- All files has standard ASF License header
+
+- Can compile from source
+
+- All unit tests can pass  
+
+  ```sh
+  mvn clean test # This will run all unit tests
+  # you can also open rat and style plugin to check if every file meets 
requirements.
+  mvn clean install -Drat.skip=false -Dcheckstyle.skip=false
+  ```
+
+- Release candidates match with corresponding tags, you can find tag link and 
hash in vote email.
+
+## 进入投票
+
+投票分两个阶段:
+
+1. 
Dubbo社区投票,发起投票邮件到[email protected]。在社区开发者Review,并统计到3个同意发版的binding票后,即可进入下一阶段的投票。
+2. Apache社区投票,发起投票邮件到[email protected]。在Apache PMC 
Review,并统计到3个统一发版的binding票后,即可进行正式发布。
+
+邮件模板:
+
+```tex
+Hello Dubbo Community,
+
+This is a call for vote to release Apache Dubbo (Incubating) version 2.6.2.
+
+The release candidates:
+https://dist.apache.org/repos/dist/dev/incubator/dubbo/2.6.2/
+
+Git tag for the release:
+https://github.com/apache/incubator-dubbo/tree/dubbo-2.6.2
+
+Hash for the release tag:
+afab04c53edab38d52275d2a198ea1aff7a4f41e
+
+Release Notes:
+https://github.com/apache/incubator-dubbo/releases/tag/untagged-4775c0a22c60fca55118
+
+The artifacts have been signed with Key : 28681CB1, which can be found in the 
keys file:
+https://dist.apache.org/repos/dist/dev/incubator/dubbo/KEYS
+
+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
+
+Thanks,
+The Apache Dubbo (Incubating) Team
+```
+
+##正式发布
+
+1. 
提交https://dist.apache.org/repos/dist/dev/incubator/dubbo目录下的发布包到https://dist.apache.org/repos/dist/release/incubator/dubbo/,完成正式发布。
+2. 发邮件到[email protected][email protected],通知社区发布完成。
+
+## 完成Maven Convenient Binary发布(可选)
+
+**apache.repository.org 
nexus仓库的权限已经申请,参见[jira](https://issues.apache.org/jira/browse/INFRA-16451)。**
+
+之前发布到maven仓库的atifacts都处于staging状态,用Apache id登录apache.repository.org,发布即可。
\ No newline at end of file
diff --git a/site_config/blog.js b/site_config/blog.js
index 6b09d7b..d0b4d2e 100644
--- a/site_config/blog.js
+++ b/site_config/blog.js
@@ -59,13 +59,20 @@ export default {
     postsTitle: '所有文章',
     list: [
       {
-        title: '在 Dubbo 应用中使用 Zookeeper',
-        author: '@beiwei30',
-        dateStr: 'August 3rd, 2018',
-        desc: '介绍了 Zookeeper 的基本概念、用法,以及如何在 Dubbo 应用中使用 Zookeeper 作为注册中心。',
-        link: '/blog/dubbo-zk.md',
+          title: '如何准备一次Apache发布',
+          author: '@chickenlj',
+          dateStr: 'August 8rd, 2018',
+          desc: '从如何搭建本地构建环境到如何发起投票,详细的介绍了Apache版本发布的完整流程',
+          link: '/blog/Prepare-an-Apache-release.md',
       },
       {
+          title: '在 Dubbo 应用中使用 Zookeeper',
+          author: '@beiwei30',
+          dateStr: 'August 3rd, 2018',
+          desc: '介绍了 Zookeeper 的基本概念、用法,以及如何在 Dubbo 应用中使用 Zookeeper 作为注册中心。',
+          link: '/blog/dubbo-zk.md',
+      },
+        {
         title: '通过QoS对服务进行动态控制',
         author: 'Huxing Zhang',
         dateStr: 'August 2nd, 2018',

Reply via email to