blob: 3faec8d4c61b905ec8048b36745bc483ab3374fa [file] [log] [blame]
<!doctype html>
<!--
Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
Free for personal and commercial use under the MIT license
https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
-->
<html lang="cn" class="no-js">
<head>
<meta charset="utf-8">
<!-- begin SEO -->
<title>ServiceComb Pack Release Guide - Apache ServiceComb</title>
<meta name="description" content="ServiceComb Pack 发行指南">
<meta name="author" content="">
<meta property="og:locale" content="cn">
<meta property="og:site_name" content="Apache ServiceComb">
<meta property="og:title" content="ServiceComb Pack Release Guide">
<link rel="canonical" href="https://github.com/pages/apache/incubator-servicecomb-website/cn/release/pack-release-guide/">
<meta property="og:url" content="https://github.com/pages/apache/incubator-servicecomb-website/cn/release/pack-release-guide/">
<meta property="og:description" content="ServiceComb Pack 发行指南">
<meta name="twitter:site" content="@ServiceComb">
<meta name="twitter:title" content="ServiceComb Pack Release Guide">
<meta name="twitter:description" content="ServiceComb Pack 发行指南">
<meta name="twitter:url" content="">
<meta name="twitter:card" content="summary">
<script type="application/ld+json">
{
"@context" : "http://schema.org",
"@type" : "Person",
"name" : "Apache ServiceComb",
"url" : "https://github.com/pages/apache/incubator-servicecomb-website",
"sameAs" : null
}
</script>
<meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
<!-- end SEO -->
<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache ServiceComb Feed">
<!-- http://t.co/dKP3o1e -->
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script>
document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
<script src="/assets/vendor/prism/prism.js"></script>
<script type="text/javascript" async
src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
</script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
<script src="https://www.apachecon.com/event-images/snippet.js"></script>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
<!-- For all browsers -->
<link rel="stylesheet" href="/assets/css/main.css">
<link rel="stylesheet" href="/assets/vendor/prism/prism.css">
<!--[if lte IE 9]>
<style>
/* old IE unsupported flexbox fixes */
.greedy-nav .site-title {
padding-right: 3em;
}
.greedy-nav button {
position: absolute;
top: 0;
right: 0;
height: 100%;
}
</style>
<![endif]-->
<meta http-equiv="cleartype" content="on">
<!-- start custom head snippets -->
<!-- insert favicons. use http://realfavicongenerator.net/ -->
<link href="https://fonts.loli.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
<script src="/assets/js/custom.js"></script>
<!-- end custom head snippets -->
</head>
<body class="layout--single">
<!--[if lt IE 9]>
<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
<![endif]-->
<div class="masthead" onmouseleave="$('#childrenShow').css('display', 'none')">
<div class="masthead__inner-wrap">
<div class="masthead__menu">
<nav id="site-nav" class="greedy-nav">
<a class="site-title active" href="/cn"><img src="https://www.apache.org/img/servicecomb.png"></a>
<ul class="visible-links">
<li class="masthead__menu-item" onmouseenter="$('#childrenShow').css('display', 'none')">
<a href="/cn/">首页</a>
</li>
<li class="masthead__menu-item" onmouseenter="$('#childrenShow').css('display', 'none')">
<a href="/cn/developers/">项目</a>
</li>
<li class="def-nav-li" onmouseenter="$('#childrenShow').css('display', 'block')">
<a href="/cn/docs/users/">文档</a>
<ul id="childrenShow" class="def-children-show-cn" onmouseleave="$('#childrenShow').css('display', 'none')">
<li><a href="/cn/docs/getting-started/" class="">入门指南</a></li>
<li><a href="/cn/docs/users/" class="">用户手册</a></li>
<li><a href="/cn/slides/" class="">大咖视频</a></li>
<li><a href="/cn/faqs/" class="">常见问题</a></li>
</ul>
</li>
<li class="masthead__menu-item" onmouseenter="$('#childrenShow').css('display', 'none')">
<a href="/cn/year-archive/">博文</a>
</li>
<li class="masthead__menu-item" onmouseenter="$('#childrenShow').css('display', 'none')">
<a class="active" href="/cn/release/">下载</a>
</li>
</ul>
<button><div class="navicon"></div></button>
<ul class="hidden-links hidden"></ul>
<div class="nav-lang">
<a href=/release/pack-release-guide/>English</a>
</div>
</nav>
</div>
</div>
</div>
<div id="main" role="main">
<div class="sidebar sticky">
<div class="back-to-home"><a href="/cn/">首页</a> > ServiceComb Pack Release Guide</div>
<nav class="nav__list">
<input id="ac-toc" name="accordion-toc" type="checkbox" />
<label for="ac-toc">切换菜单</label>
<ul class="nav__items">
<li>
<span class="nav__sub-title">Service-Center</span>
<ul>
<li><a href="/cn/release/service-center-release-notes/" class="">发布说明</a></li>
<li><a href="/cn/release/service-center-downloads/" class="">发布包</a></li>
</ul>
</li>
<li>
<span class="nav__sub-title">Kie</span>
<ul>
<li><a href="/cn/release/kie-release-notes/" class="">发布说明</a></li>
<li><a href="/cn/release/kie-downloads/" class="">发布包</a></li>
</ul>
</li>
<li>
<span class="nav__sub-title">Java-Chassis</span>
<ul>
<li><a href="/cn/release/java-chassis-release-notes/" class="">发布说明</a></li>
<li><a href="/cn/release/java-chassis-downloads/" class="">发布包</a></li>
</ul>
</li>
<li>
<span class="nav__sub-title">Mesher</span>
<ul>
<li><a href="/cn/release/mesher-release-notes/" class="">发布说明</a></li>
<li><a href="/cn/release/mesher-downloads/" class="">发布包</a></li>
</ul>
</li>
<li>
<span class="nav__sub-title">Pack</span>
<ul>
<li><a href="/cn/release/pack-release-notes/" class="">发布说明</a></li>
<li><a href="/cn/release/pack-downloads/" class="">发布包</a></li>
</ul>
</li>
<li>
<span class="nav__sub-title">Toolkit</span>
<ul>
<li><a href="/cn/release/toolkit-release-notes/" class="">发布说明</a></li>
<li><a href="/cn/release/toolkit-downloads/" class="">发布包</a></li>
</ul>
</li>
<li>
<span class="nav__sub-title">Saga Actuator</span>
<ul>
<li><a href="/cn/release/saga-actuator-release-notes/" class="">发布说明</a></li>
<li><a href="/cn/release/saga-actuator-downloads/" class="">发布包</a></li>
</ul>
</li>
<li>
<span class="nav__sub-title">Saga</span>
<ul>
<li><a href="/cn/release/saga-release-notes/" class="">发布说明</a></li>
<li><a href="/cn/release/saga-downloads/" class="">发布包</a></li>
</ul>
</li>
</ul>
</nav>
</div>
<article class="page" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="headline" content="ServiceComb Pack Release Guide">
<meta itemprop="description" content="ServiceComb Pack 发行指南">
<meta itemprop="dateModified" content="August 06, 2022">
<div class="page__inner-wrap">
<header>
<h1 class="page__title" itemprop="headline">ServiceComb Pack Release Guide
</h1>
</header>
<section class="page__content" itemprop="text">
<h2 id="发布环境准备">发布环境准备</h2>
<h4 id="生成签名密钥">生成签名密钥</h4>
<ol>
<li>安装 GPG</li>
</ol>
<p><a href="https://www.gnupg.org/download/index.html">GnuPG官网</a>下载 2.X 安装包. 安装完毕后可以使用如下命令查看版本</p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>gpg <span class="nt">--version</span>
gpg <span class="o">(</span>GnuPG/MacGPG2<span class="o">)</span> 2.2.20
libgcrypt 1.8.5
Copyright <span class="o">(</span>C<span class="o">)</span> 2020 Free Software Foundation, Inc.
</code></pre></div></div>
<ol>
<li>配置 GPG</li>
</ol>
<p>安装完毕后你可以找到 <code class="language-plaintext highlighter-rouge">$HOME/.gnupg/gpg.conf</code> 文件,并增加如下<a href="https://infra.apache.org/openpgp.html#sha-defaults">推荐配置</a></p>
<div class="language-properties highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">personal-digest-preferences</span> <span class="err">SHA512</span>
<span class="err">cert-digest-algo</span> <span class="err">SHA512</span>
<span class="err">default-preference-list</span> <span class="err">SHA512</span> <span class="err">SHA384</span> <span class="err">SHA256</span> <span class="err">SHA224</span> <span class="err">AES256</span> <span class="err">AES192</span> <span class="err">AES</span> <span class="err">CAST5</span> <span class="err">ZLIB</span> <span class="err">BZIP2</span> <span class="err">ZIP</span> <span class="err">Uncompressed</span>
</code></pre></div></div>
<ol>
<li>用 GPG 生成密钥</li>
</ol>
<p>根据提示使用 ASF 邮箱生成 GPG 的密钥,更多详细说明请参考 <a href="https://infra.apache.org/openpgp.html#generate-key">Generate Key with GPG</a></p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>gpg <span class="nt">--full-gen-key</span>
gpg <span class="o">(</span>GnuPG/MacGPG2<span class="o">)</span> 2.2.34<span class="p">;</span> Copyright <span class="o">(</span>C<span class="o">)</span> 2022 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Please <span class="k">select </span>what kind of key you want:
<span class="o">(</span>1<span class="o">)</span> RSA and RSA <span class="o">(</span>default<span class="o">)</span>
<span class="o">(</span>2<span class="o">)</span> DSA and Elgamal
<span class="o">(</span>3<span class="o">)</span> DSA <span class="o">(</span>sign only<span class="o">)</span>
<span class="o">(</span>4<span class="o">)</span> RSA <span class="o">(</span>sign only<span class="o">)</span>
<span class="o">(</span>14<span class="o">)</span> Existing key from card
Your selection? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize <span class="k">do </span>you want? <span class="o">(</span>3072<span class="o">)</span> 4096
Requested keysize is 4096 bits
Please specify how long the key should be valid.
0 <span class="o">=</span> key does not expire
&lt;n&gt; <span class="o">=</span> key expires <span class="k">in </span>n days
&lt;n&gt;w <span class="o">=</span> key expires <span class="k">in </span>n weeks
&lt;n&gt;m <span class="o">=</span> key expires <span class="k">in </span>n months
&lt;n&gt;y <span class="o">=</span> key expires <span class="k">in </span>n years
Key is valid <span class="k">for</span>? <span class="o">(</span>0<span class="o">)</span>
Key does not expire at all
Is this correct? <span class="o">(</span>y/N<span class="o">)</span> y
GnuPG needs to construct a user ID to identify your key.
Real name: <span class="o">[</span>你的 ASF 账号]
Email address: <span class="o">[</span>你的 ASF 邮箱]
Comment: CODE SIGNING KEY
You selected this USER-ID:
<span class="s2">"[你的 ASF 账号] (CODE SIGNING KEY) &lt;[你的 ASF 邮箱]&gt;"</span>
Change <span class="o">(</span>N<span class="o">)</span>ame, <span class="o">(</span>C<span class="o">)</span>omment, <span class="o">(</span>E<span class="o">)</span>mail or <span class="o">(</span>O<span class="o">)</span>kay/<span class="o">(</span>Q<span class="o">)</span>uit? O
</code></pre></div></div>
<p>生成密钥的过程中会提示你输入一个<strong>[密钥密码]</strong>用来保护你的密钥,请记住这个密钥密码</p>
<ol>
<li>查看 GPG 公钥ID</li>
</ol>
<p>你可以使用如下命令查看生成的密钥,请保存 <strong>[公钥ID]</strong></p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>gpg <span class="nt">--list-keys</span>
pub rsa4096 2022-05-05 <span class="o">[</span>SC]
<span class="o">[</span>公钥ID]
uid <span class="o">[</span> unknown] <span class="o">[</span>你的 ASF 账号] <span class="o">(</span>CODE SIGNING KEY<span class="o">)</span> &lt;<span class="o">[</span>你的 ASF 邮箱]&gt;
sub rsa4096 2022-05-05 <span class="o">[</span>E]
</code></pre></div></div>
<ol>
<li>发布公钥到密钥服务器</li>
</ol>
<p>使用 <strong>[公钥ID]</strong> 将公钥发布到 <code class="language-plaintext highlighter-rouge">pgpkeys.mit.edu</code>,发布后稍等一会就会自动同步到其他密钥服务器</p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>gpg <span class="nt">--keyserver</span> pgpkeys.mit.edu <span class="nt">--send-key</span> <span class="o">[</span>公钥ID]
</code></pre></div></div>
<p>使用如下命令验证公钥是否发布成功(因为发布后后台需要同步,所以可能需等待一会)</p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>gpg <span class="nt">--keyserver</span> hkp://pgpkeys.mit.edu <span class="nt">--recv-keys</span> <span class="o">[</span>公钥ID]
</code></pre></div></div>
<p>如果你看到如下信息,说明已经发布成功</p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>gpg: key <span class="o">[</span>公钥ID]: <span class="s2">"[你的 ASF 账号] (CODE SIGNING KEY) &lt;[你的 ASF 邮箱]&gt;"</span> not changed
gpg: Total number processed: 1
gpg: unchanged: 1
</code></pre></div></div>
<ol>
<li>发布公钥指纹到 ASF 用户信息中</li>
</ol>
<p>使用以下命令生成公钥指纹,登录 https://id.apache.org, 将下面<strong>公钥指纹</strong>粘贴到自己的用户信息中 OpenPGP Public Key Primary Fingerprint 中。</p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>gpg <span class="nt">--fingerprint</span> Lei Zhang
pub rsa4096 2022-05-05 <span class="o">[</span>SC]
<span class="o">[</span>公钥指纹]
uid <span class="o">[</span> unknown] <span class="o">[</span>你的 ASF 账号] <span class="o">(</span>CODE SIGNING KEY<span class="o">)</span> &lt;<span class="o">[</span>你的 ASF 邮箱]&gt;
sub rsa4096 2022-05-05 <span class="o">[</span>E]
</code></pre></div></div>
<ol>
<li>备份公钥和私钥(不是发布流程的必须环节)</li>
</ol>
<p>你可以使用以下方式备份密钥</p>
<p>导出公钥</p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>gpg <span class="nt">-a</span> <span class="nt">-o</span> public-file.key <span class="nt">--export</span> <span class="o">[</span>公钥ID]
</code></pre></div></div>
<p>导出私钥(需要生成密钥时的密码)</p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>gpg <span class="nt">-a</span> <span class="nt">-o</span> private-file.key <span class="nt">--export-secret-keys</span> <span class="o">[</span>公钥ID]
</code></pre></div></div>
<ol>
<li>将公钥追加到以下两个文件中</li>
</ol>
<ul>
<li>https://dist.apache.org/repos/dist/dev/servicecomb/KEYS</li>
<li>https://dist.apache.org/repos/dist/release/servicecomb/KEYS</li>
</ul>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>svn co <span class="nt">--depth</span><span class="o">=</span>empty https://dist.apache.org/repos/dist/dev/servicecomb
svn up KEYS
<span class="nb">cat </span>public-file.key <span class="o">&gt;&gt;</span> KEYS
svn commit <span class="nt">-m</span> <span class="s1">'add [你的 ASF 邮箱] gpg public key'</span>
svn co <span class="nt">--depth</span><span class="o">=</span>empty https://dist.apache.org/repos/dist/release/servicecomb
svn up KEYS
<span class="nb">cat </span>public-file.key <span class="o">&gt;&gt;</span> KEYS
svn commit <span class="nt">-m</span> <span class="s1">'add [你的 ASF 邮箱] gpg public key'</span>
</code></pre></div></div>
<h4 id="apache-maven-认证配置">Apache Maven 认证配置</h4>
<p>在发布前我们需要配置 Apache Maven 仓库的服务器地址、账号和密码。为了安全我们使用 <a href="https://maven.apache.org/guides/mini/guide-encryption.html">Password Encryption</a> 对 Apache LDAP 密码加密</p>
<ol>
<li>创建一个主密码</li>
</ol>
<p>使用如下命令创建一个 <strong>[主密码]</strong>,并生成 <strong>[加密后的主密码]</strong></p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>mvn <span class="nt">--encrypt-master-password</span> <span class="o">[</span>主密码]
</code></pre></div></div>
<p>将[加密后的主密码]配置在 ~/.m2/settings-security.xml 文件中</p>
<div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;settingsSecurity&gt;</span>
<span class="nt">&lt;master&gt;</span>[加密后的主密码]<span class="nt">&lt;/master&gt;</span>
<span class="nt">&lt;/settingsSecurity&gt;</span>
</code></pre></div></div>
<ol>
<li>加密你的 ASF LDAP 密码</li>
</ol>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>mvn <span class="nt">--encrypt-password</span> <span class="o">[</span>你的 ASF LDAP 密码]
</code></pre></div></div>
<ol>
<li>加密你生成 GPG 密钥时输入的 [密钥密码]</li>
</ol>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>mvn <span class="nt">--encrypt-password</span> <span class="o">[</span>密钥密码]
</code></pre></div></div>
<ol>
<li><code class="language-plaintext highlighter-rouge">~/.m2/settings.xml</code> 文件中配置发布服务器地址和加密后的密码</li>
</ol>
<div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;settings&gt;</span>
<span class="nt">&lt;servers&gt;</span>
<span class="nt">&lt;server&gt;</span>
<span class="nt">&lt;id&gt;</span>apache.snapshots.https<span class="nt">&lt;/id&gt;</span>
<span class="nt">&lt;username&gt;</span>[你的 ASF 账号]<span class="nt">&lt;/username&gt;</span>
<span class="nt">&lt;password&gt;</span>[加密后的 ASF LDAP 密码]<span class="nt">&lt;/password&gt;</span>
<span class="nt">&lt;/server&gt;</span>
<span class="nt">&lt;server&gt;</span>
<span class="nt">&lt;id&gt;</span>apache.releases.https<span class="nt">&lt;/id&gt;</span>
<span class="nt">&lt;username&gt;</span>[你的 ASF 账号]<span class="nt">&lt;/username&gt;</span>
<span class="nt">&lt;password&gt;</span>[加密后的 ASF LDAP 密码]<span class="nt">&lt;/password&gt;</span>
<span class="nt">&lt;/server&gt;</span>
<span class="nt">&lt;server&gt;</span>
<span class="nt">&lt;id&gt;</span>gpg.passphrase<span class="nt">&lt;/id&gt;</span>
<span class="nt">&lt;passphrase&gt;</span>[加密后的密钥密码]<span class="nt">&lt;/passphrase&gt;</span>
<span class="nt">&lt;/server&gt;</span>
<span class="nt">&lt;/servers&gt;</span>
<span class="nt">&lt;/settings&gt;</span>
</code></pre></div></div>
<h2 id="servicecomb-pack-发布">ServiceComb Pack 发布</h2>
<p>本文档基于 <code class="language-plaintext highlighter-rouge">0.7.0</code> 正式版发布过程编写。在正式开始发布之前请提前一周通过 <code class="language-plaintext highlighter-rouge">dev@servicecomb.apache.org</code> 预告即将开始发布,确认代码是否已经准备就绪。</p>
<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Hello All,
Since from last ServiceComb pack [Previous version] release, we have made significant changes, so now is the time to release the new version [Release version].
I will cut a new release tomorrow morning from the branch https://github.com/apache/servicecomb-pack/tree/[Branch name].
@PMC/@Committers please let me know if there is any important patch we need to merge before this release.
Regards
[Your name]
</code></pre></div></div>
<p><strong>注意:</strong> 发布流程中的 <strong>PMC投票</strong> 环节通常需要 3 天,在没有任何 PMC 投 -1 票后才能正式发布,因此请提前计划发布活动。</p>
<h4 id="发布到临时筹备库staging-repositories">发布到临时筹备库(Staging Repositories)</h4>
<ol>
<li>
<p>使用 ASF LDAP 账号登录 <code class="language-plaintext highlighter-rouge">https://repository.apache.org/</code> 清除 Staging Repositories 中与 Pack 相关的多余版本</p>
</li>
<li>
<p>下载代码</p>
</li>
</ol>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">mkdir</span> ~/Work/apache-release-workspace
<span class="nb">cd</span> ~/Work/apache-release-workspace
git clone https://github.com/apache/servicecomb-pack.git
</code></pre></div></div>
<ol>
<li>执行 Maven 部署命令,<strong>注意:使用 <code class="language-plaintext highlighter-rouge">-Drevision=0.7.0</code> 设置要发布的版本号</strong></li>
</ol>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cd</span> ~/Work/apache-release-workspace/servicecomb-pack
mvn deploy <span class="nt">-DskipTests</span> <span class="nt">-Prelease</span> <span class="nt">-Drevision</span><span class="o">=</span>0.7.0
</code></pre></div></div>
<ol>
<li>使用 ASF LDAP 账号登录 <code class="language-plaintext highlighter-rouge">https://repository.apache.org/</code>,在 Staging Repositories 中选择刚刚发布的 repository,点击 Close 后完成临时发布。</li>
</ol>
<h4 id="测试临时筹备库中的-artifacts">测试临时筹备库中的 Artifacts</h4>
<p>在发起投票前,我们需要测试 Staging Repositories 中刚刚发布的 Artifacts ,我们需要配置一些参数,让验收测试从 Staging Repositories 中拉取依 Artifacts,更多详细说明可以参考 <a href="https://maven.apache.org/guides/development/guide-testing-releases.html">Guide to Testing Staged Releases</a></p>
<ol>
<li>删除本地仓库中 Artifacts</li>
</ol>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">rm</span> <span class="nt">-rf</span> ~/.m2/repository/org/apache/servicecomb/pack
</code></pre></div></div>
<ol>
<li><code class="language-plaintext highlighter-rouge">~/.m2/settings.xml</code> 中增加如下配置</li>
</ol>
<div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;profiles&gt;</span>
<span class="nt">&lt;profile&gt;</span>
<span class="nt">&lt;id&gt;</span>staged-releases<span class="nt">&lt;/id&gt;</span>
<span class="nt">&lt;repositories&gt;</span>
<span class="nt">&lt;repository&gt;</span>
<span class="nt">&lt;id&gt;</span>staged-releases<span class="nt">&lt;/id&gt;</span>
<span class="nt">&lt;url&gt;</span>https://repository.apache.org/content/groups/staging/<span class="nt">&lt;/url&gt;</span>
<span class="nt">&lt;/repository&gt;</span>
<span class="nt">&lt;/repositories&gt;</span>
<span class="nt">&lt;pluginRepositories&gt;</span>
<span class="nt">&lt;pluginRepository&gt;</span>
<span class="nt">&lt;id&gt;</span>staged-releases<span class="nt">&lt;/id&gt;</span>
<span class="nt">&lt;url&gt;</span>https://repository.apache.org/content/groups/staging/<span class="nt">&lt;/url&gt;</span>
<span class="nt">&lt;/pluginRepository&gt;</span>
<span class="nt">&lt;/pluginRepositories&gt;</span>
<span class="nt">&lt;/profile&gt;</span>
<span class="nt">&lt;/profiles&gt;</span>
</code></pre></div></div>
<ol>
<li>执行验收测试,<strong>注意:使用 <code class="language-plaintext highlighter-rouge">-Drevision=0.7.0</code> 设置要发布的版本号</strong></li>
</ol>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cd</span> ~/Work/apache-release-workspace/servicecomb-pack
mvn clean verify <span class="nt">-f</span> demo <span class="nt">-Pdemo</span> <span class="nt">-Pdocker</span> <span class="nt">-Drevision</span><span class="o">=</span>0.7.0 <span class="nt">-Pstaged-releases</span> <span class="nt">-U</span>
mvn clean verify <span class="nt">-f</span> acceptance-tests <span class="nt">-Pdemo</span> <span class="nt">-Pdocker</span> <span class="nt">-Drevision</span><span class="o">=</span>0.7.0 <span class="nt">-Pstaged-releases</span>
</code></pre></div></div>
<ol>
<li>检查本地 Artifacts 中是否还存未替换的 SNAPSHOT 版本</li>
</ol>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>find ~/.m2/repository/org/apache/servicecomb/pack <span class="nt">-name</span> <span class="s2">"*-0.7.0.pom"</span> | xargs <span class="nb">grep</span> <span class="s2">"SNAPSHOT"</span>
</code></pre></div></div>
<ol>
<li>如果一切正常,我们将创建 <code class="language-plaintext highlighter-rouge">0.7.x</code> 分支, <code class="language-plaintext highlighter-rouge">0.7.0</code> TAG,修改主干版本号为 <code class="language-plaintext highlighter-rouge">0.8.0-SNAPSHOT</code></li>
</ol>
<p>创建并推送 <code class="language-plaintext highlighter-rouge">0.7.x</code> 分支</p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cd</span> ~/Work/apache-release-workspace/servicecomb-pack
git checkout master
git checkout <span class="nt">-b</span> 0.7.x
mvn versions:set-property <span class="nt">-Dproperty</span><span class="o">=</span>revision <span class="nt">-DnewVersion</span><span class="o">=</span>0.7.0
git add pom.xml
git commit <span class="nt">-m</span> <span class="s1">'Cut 0.7.0 Release'</span>
git push origin 0.7.x
</code></pre></div></div>
<p>在 0.7.x 分支上创建并推送 <code class="language-plaintext highlighter-rouge">0.7.0</code> TAG</p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cd</span> ~/Work/apache-release-workspace/servicecomb-pack
git tag <span class="nt">-a</span> 0.7.0 <span class="nt">-m</span> <span class="s2">"ServiceComb Pack 0.7.0 Release"</span>
git push origin 0.7.0
</code></pre></div></div>
<p>切换到主版本,修改版本号为 <code class="language-plaintext highlighter-rouge">0.8.0-SNAPSHOT</code> 并推送</p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cd</span> ~/Work/apache-release-workspace/servicecomb-pack
git checkout master
mvn versions:set-property <span class="nt">-Dproperty</span><span class="o">=</span>revision <span class="nt">-DnewVersion</span><span class="o">=</span>0.8.0-SNAPSHOT
git add pom.xml
git commit <span class="nt">-m</span> <span class="s1">'Update Release Number to 0.8.0-SNAPSHOT'</span>
git push origin master
</code></pre></div></div>
<h4 id="签署版本--上传到-asf-svn-仓库">签署版本 &amp; 上传到 ASF SVN 仓库</h4>
<ol>
<li>拉取 SVN 仓库到本地</li>
</ol>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">mkdir</span> ~/Work/apache-release-workspace/dist
<span class="nb">cd</span> ~/Work/apache-release-workspace/dist
svn co https://dist.apache.org/repos/dist/dev/servicecomb/servicecomb-pack <span class="nt">--username</span><span class="o">=[</span>你的 ASF LDAP 用户名] <span class="nt">--password</span><span class="o">=[</span>你的 ASF LDAP 密码]
</code></pre></div></div>
<ol>
<li>创建发布包目录</li>
</ol>
<p>如果你是第 1 次发布 0.7.0 版本,那么创建 <code class="language-plaintext highlighter-rouge">0.7.0/rc1</code> 目录,例如:</p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">mkdir</span> <span class="nt">-p</span> ~/Work/apache-release-workspace/dist/servicecomb-pack/0.7.0/rc1
</code></pre></div></div>
<ol>
<li>复制发布包到发布目录</li>
</ol>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cd</span> ~/Work/apache-release-workspace/dist/servicecomb-pack/0.7.0/rc1
<span class="nb">cp</span> ~/Work/apache-release-workspace/servicecomb-pack/distribution/target/apache-servicecomb-pack-distribution-0.7.0-bin.zip <span class="nb">.</span>
<span class="nb">cp</span> ~/Work/apache-release-workspace/servicecomb-pack/distribution/target/apache-servicecomb-pack-distribution-0.7.0-bin.zip.asc <span class="nb">.</span>
<span class="nb">cp</span> ~/Work/apache-release-workspace/servicecomb-pack/distribution/target/apache-servicecomb-pack-distribution-0.7.0-src.zip <span class="nb">.</span>
<span class="nb">cp</span> ~/Work/apache-release-workspace/servicecomb-pack/distribution/target/apache-servicecomb-pack-distribution-0.7.0-src.zip.asc <span class="nb">.</span>
</code></pre></div></div>
<ol>
<li>生成 SHA512 签名</li>
</ol>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cd</span> ~/Work/apache-release-workspace/dist/servicecomb-pack/0.7.0/rc1
shasum <span class="nt">-a</span> 512 apache-servicecomb-pack-distribution-0.7.0-bin.zip <span class="o">&gt;&gt;</span> apache-servicecomb-pack-distribution-0.7.0-bin.zip.sha512
shasum <span class="nt">-a</span> 512 apache-servicecomb-pack-distribution-0.7.0-src.zip <span class="o">&gt;&gt;</span> apache-servicecomb-pack-distribution-0.7.0-src.zip.sha512
</code></pre></div></div>
<ol>
<li>上传到 ASF SVN 仓库</li>
</ol>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cd</span> ~/Work/apache-release-workspace/dist/servicecomb-pack
svn add 0.7.0
svn commit <span class="nt">-m</span> <span class="s1">'prepare for 0.7.0 RC1'</span> <span class="nt">--username</span><span class="o">=[</span>你的 ASF LDAP 用户名] <span class="nt">--password</span><span class="o">=[</span>你的 ASF LDAP 密码]
</code></pre></div></div>
<ol>
<li>验证候选版本</li>
</ol>
<p>从 https://dist.apache.org/repos/dist/dev/servicecomb/servicecomb-pack/0.7.0/rc1/ 下载发布包检查 GPG 签名和 SHA512</p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">mkdir</span> ~/Work/apache-release-workspace/verify
<span class="nb">cd</span> ~/Work/apache-release-workspace/verify
curl <span class="nt">-O</span> https://dist.apache.org/repos/dist/dev/servicecomb/servicecomb-pack/0.7.0/rc1/apache-servicecomb-pack-distribution-0.7.0-bin.zip
curl <span class="nt">-O</span> https://dist.apache.org/repos/dist/dev/servicecomb/servicecomb-pack/0.7.0/rc1/apache-servicecomb-pack-distribution-0.7.0-bin.zip.asc
curl <span class="nt">-O</span> https://dist.apache.org/repos/dist/dev/servicecomb/servicecomb-pack/0.7.0/rc1/apache-servicecomb-pack-distribution-0.7.0-bin.zip.sha512
curl <span class="nt">-O</span> https://dist.apache.org/repos/dist/dev/servicecomb/servicecomb-pack/0.7.0/rc1/apache-servicecomb-pack-distribution-0.7.0-src.zip
curl <span class="nt">-O</span> https://dist.apache.org/repos/dist/dev/servicecomb/servicecomb-pack/0.7.0/rc1/apache-servicecomb-pack-distribution-0.7.0-src.zip.asc
curl <span class="nt">-O</span> https://dist.apache.org/repos/dist/dev/servicecomb/servicecomb-pack/0.7.0/rc1/apache-servicecomb-pack-distribution-0.7.0-src.zip.sha512
</code></pre></div></div>
<p>检查 SHA512 哈希</p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cd</span> ~/Work/apache-release-workspace/verify
shasum <span class="nt">-c</span> apache-servicecomb-pack-distribution-0.7.0-bin.zip.sha512
shasum <span class="nt">-c</span> apache-servicecomb-pack-distribution-0.7.0-src.zip.sha512
</code></pre></div></div>
<p>导入公钥</p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>curl https://dist.apache.org/repos/dist/dev/servicecomb/KEYS <span class="o">&gt;&gt;</span> KEYS
<span class="nv">$ </span>gpg <span class="nt">--import</span> KEYS
</code></pre></div></div>
<p>检查 GPG 签名</p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cd</span> ~/Work/apache-release-workspace/verify
gpg <span class="nt">--verify</span> apache-servicecomb-pack-distribution-0.7.0-bin.zip.asc apache-servicecomb-pack-distribution-0.7.0-bin.zip
gpg <span class="nt">--verify</span> apache-servicecomb-pack-distribution-0.7.0-src.zip.asc apache-servicecomb-pack-distribution-0.7.0-src.zip
</code></pre></div></div>
<h4 id="整理发布说明">整理发布说明</h4>
<p>你需要检查 Jira 上的 ISSUE 是否都已更新,然后参考 <a href="https://confluence.atlassian.com/adminjiraserver/creating-release-notes-938847219.html">Creating release notes</a> 生成发布说明</p>
<h4 id="pmc-发布投票">PMC 发布投票</h4>
<p>发送投票邮件 <code class="language-plaintext highlighter-rouge">[VOTE] Release Apache ServiceComb Pack version 0.7.0</code><code class="language-plaintext highlighter-rouge">dev@servicecomb.apache.org</code>,你可以参考如下邮件模版:</p>
<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Hi all,
This is a call for Vote to release Apache ServiceComb Pack version 0.7.0
Release Candidate:
https://dist.apache.org/repos/dist/dev/servicecomb/servicecomb-pack/0.7.0/rc1/
Staging Repository:
https://repository.apache.org/content/repositories/orgapacheservicecomb-1490
Release Tag:
https://github.com/apache/servicecomb-pack/releases/tag/0.7.0
Release CommitID:
fae7326c0bac2b07e06ba83cf2cc284648ab1713
Release Notes:
https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12321626<span class="err">&amp;</span>version=12348307
Keys to verify the Release Candidate:
https://dist.apache.org/repos/dist/dev/servicecomb/KEYS
Voting will start now (Thursday, 12th May 2022) and will remain open for
at-least 72 hours, Request all PMC members to give their vote.
[ ] +1 Release this package as 0.7.0
[ ] +0 No Opinion
[ ] -1 Do not release this package because...
On behalf of the ServiceComb Team
Regards
[Your name]
</code></pre></div></div>
<p>等待 72 小时后,你可以通过 <code class="language-plaintext highlighter-rouge">dev@servicecomb.apache.org</code> 发送投票截止通知。</p>
<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Hi All,
Thanks all for voting on this release, the vote has been closed now, and we will announce the results shortly.
Regards
[Your name]
</code></pre></div></div>
<p>你可以通过 <code class="language-plaintext highlighter-rouge">dev@servicecomb.apache.org</code> 发布投票结果,如果您获得了至少三个 binding +1 投票,并且没有任何一个 binding -1 的投票,那么你可以继续发布。否则请解决问题并从 <strong>ServiceComb Pack 发布</strong> 重新开始。</p>
<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Hello All,
We are glad to announce that ServiceComb community has approved the Apache ServiceComb Pack 0.7.0 release with the following results:
+1 binding: 3 ([PMC Name],[PMC Name],[PMC Name],...)
We will be publishing the release binaries soon.
On behalf of ServiceComb Team
Thanks all for your participation in this vote.
Regards
[Your name]
</code></pre></div></div>
<h4 id="公告">公告</h4>
<ol>
<li>
<p>使用 ASF LDAP 账号登录 <code class="language-plaintext highlighter-rouge">https://repository.apache.org/</code> 选择 Staging Repositories 之前的 Artifacts,点击 Release 按钮。需要一段时间后会自动同步到 <a href="https://mvnrepository.com/repos/central">Maven Central Repository</a> 中央库。</p>
</li>
<li>
<p>上传发布包到 ASF 仓库</p>
</li>
</ol>
<p>将 https://dist.apache.org/repos/dist/dev/servicecomb/servicecomb-pack/0.7.0/rc01/ 下的内容上传到 https://dist.apache.org/repos/dist/release/servicecomb/servicecomb-pack/0.7.0</p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">mkdir</span> <span class="nt">-p</span> ~/Work/apache-release-workspace/release
<span class="nb">cd</span> ~/Work/apache-release-workspace/release
svn co https://dist.apache.org/repos/dist/release/servicecomb/servicecomb-pack
<span class="nb">mkdir</span> <span class="nt">-p</span> ~/Work/apache-release-workspace/release/servicecomb-pack/0.7.0
<span class="nb">cp</span> ~/Work/apache-release-workspace/dist/servicecomb-pack/0.7.0/rc1/<span class="k">*</span> ~/Work/apache-release-workspace/release/servicecomb-pack/0.7.0
<span class="nb">cd</span> ~/Work/apache-release-workspace/release/servicecomb-pack
svn add 0.7.0
svn commit <span class="nt">-m</span> <span class="s1">'Upload ServiceComb Pack 0.7.0 Release'</span>
</code></pre></div></div>
<ol>
<li>删除之前的 RC 版本</li>
</ol>
<p>删除 https://dist.apache.org/repos/dist/dev/servicecomb/servicecomb-pack/0.7.0</p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cd</span> ~/Work/apache-release-workspace/dist/servicecomb-pack
<span class="nb">rm</span> <span class="nt">-rf</span> 0.7.0
svn delete 0.7.0
svn commit <span class="nt">-m</span> <span class="s1">'Remove ServiceComb Pack 0.7.0 RC'</span>
</code></pre></div></div>
<ol>
<li>删除之前的 0.6.0 Release 版本</li>
</ol>
<p>删除 https://dist.apache.org/repos/dist/release/servicecomb/servicecomb-pack/0.6.0/</p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cd</span> ~/Work/apache-release-workspace/release/servicecomb-pack
<span class="nb">rm</span> <span class="nt">-rf</span> 0.6.0
svn delete 0.6.0
svn commit <span class="nt">-m</span> <span class="s1">'Remove ServiceComb Pack 0.6.0 Release'</span>
</code></pre></div></div>
<ol>
<li>
<p>等待 <a href="https://mvnrepository.com/repos/central">Maven Central Repository</a> 中央库已经同步完毕</p>
</li>
<li>
<p>在 Github 上创建 0.7.0 Tag 的 Release</p>
</li>
</ol>
<p>打开 <code class="language-plaintext highlighter-rouge">https://github.com/apache/servicecomb-pack/releases/tag/0.7.0</code> 点击 <code class="language-plaintext highlighter-rouge">Create release from tag</code> 按钮。发布内容填写来自 Jira 的 <a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12321626&amp;version=12348307">Release Notes</a></p>
<ol>
<li>更新 <a href="https://github.com/apache/servicecomb-website">ServiceComb Website</a></li>
</ol>
<ul>
<li>https://github.com/apache/servicecomb-website/blob/master/_release/cn/pack_downloads.md</li>
<li>https://github.com/apache/servicecomb-website/blob/master/_release/cn/pack_releaseNotes.md</li>
<li>https://github.com/apache/servicecomb-website/blob/master/_release/cn/release.md</li>
<li>https://github.com/apache/servicecomb-website/blob/master/_release/pack_downloads.md</li>
<li>https://github.com/apache/servicecomb-website/blob/master/_release/pack_releaseNotes.md</li>
<li>https://github.com/apache/servicecomb-website/blob/master/_release/release.md</li>
<li>https://github.com/apache/servicecomb-website/blob/master/_pages/cn/home.md</li>
<li>https://github.com/apache/servicecomb-website/blob/master/_pages/home.md</li>
</ul>
<ol>
<li>发送 <code class="language-plaintext highlighter-rouge">[ANNOUNCE] Apache ServiceComb Pack version 0.7.0 Released</code> 邮件到 <code class="language-plaintext highlighter-rouge">dev@servicecomb.apache.org</code><code class="language-plaintext highlighter-rouge">announce@apache.org</code></li>
</ol>
<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Hello All,
Apache ServiceComb Team is glad to announce the release of Apache
ServiceComb Pack 0.7.0
Apache ServiceComb Pack(https://github.com/apache/servicecomb-pack) is an
eventually data consistency solution for micro-service applications.
ServiceComb Pack currently has TCC and Saga distributed transaction
coordination protocol. ServiceComb Pack is composed of Alpha which plays
as a coordinator for the management of transactions and Omega which plays
as an agent and is an integral part of micro-services intercepting the
outgoing/incoming requests and reports transaction events to Alpha.
Download Links: https://servicecomb.apache.org/release/pack-downloads/
Release Notes: https://servicecomb.apache.org/release/pack-release-notes/
Know more about ServiceComb: https://servicecomb.apache.org/
ServiceComb Useful Links :
- JIRA: https://issues.apache.org/jira/browse/SCB
- Mailing lists: dev@servicecomb.apache.org
- Gitter: https://gitter.im/ServiceCombUsers/Saga
On behalf of ServiceComb Team
Regards
[Your name]
</code></pre></div></div>
</section>
<footer class="page__meta">
</footer>
</div>
</article>
</div>
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<div align="center" style="margin: 0 0;">
<ins class="adsbygoogle"
style="display:block; border-bottom: initial;"
data-ad-client="ca-pub-7328585512091257"
data-ad-slot="3049671934"
data-ad-format="auto"></ins>
</div>
<div class="page__footer">
<footer>
<!-- start custom footer snippets -->
<!-- end custom footer snippets -->
<div class="container">
<div class="row justify-content-md-center">
<div class="col">
<ul>
<p class="header">活动</p>
<a class="acevent" data-format="square" data-mode="dark" data-event="random"></a>
</ul>
</div>
<div class="col">
<ul>
<p class="header">资源</p>
<li><a href="/cn/docs/getting-started/">入门指南</a></li>
<li><a href="/cn/docs/users/">用户指南</a></li>
<li><a href="/cn/slides/">资料</a></li>
<li><a href="/cn/users/faq/">常见问题</a></li>
</ul>
</div>
<div class="col">
<ul>
<p class="header">ASF</p>
<li><a href="http://www.apache.org">基金会</a></li>
<li><a href="http://www.apache.org/licenses/">许可证</a></li>
<li><a href="http://www.apache.org/events/current-event">活动</a></li>
<li><a href="http://www.apache.org/foundation/sponsorship.html">赞助</a></li>
<li><a href="http://www.apache.org/foundation/thanks.html">鸣谢</a></li>
</ul>
</div>
<div class="col">
<ul>
<p class="header">贡献</p>
<li><a href="http://issues.apache.org/jira/browse/SCB">报告本网页问题</a></li>
<li><a href="https://github.com/apache/servicecomb-website/edit/master/_release/cn/pack_releaseGuide.md">在Github上编辑此页</a></li>
<li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
<li><a href="/cn/security">安全</a></li>
</ul>
</div>
<div class="col">
<ul class="social-icons">
<p class="header">社区</p>
<li>
<a href="mailto:dev-subscribe@servicecomb.incubator.apache.org" rel="nofollow"><span class="mail">邮件列表</span></a>
</li>
<li>
<a href="https://github.com/apache?q=ServiceComb" target="_blank"><span class="github">Github</span></a>
</li>
<li>
<a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
</li>
<li>
<a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
</li>
</ul>
</div>
</div>
</div>
<div class="page__footer-bottom">
<div>&copy; 2022 Apache ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
<div>All other marks mentioned may be trademarks or registered trademarks of their respective owners.</div>
</div>
</footer>
</div>
<script src="/assets/js/main.min.js"></script>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-101622733-1', 'auto');
ga('send', 'pageview');
</script>
</body>
</html>