blob: 01cf4a0078841fc1dd2039f67535bb182260d642 [file] [log] [blame]
<!DOCTYPE html>
<html lang="cn" class="js csstransforms3d">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<meta name="generator" content="Hugo 0.70.0" />
<meta name="description" content="">
<meta name="buildDate" content="2022-08-12 13:01:24">
<link rel="shortcut icon" href="https://shardingsphere.apache.org/document/current/img/favicon.png" type="image/x-icon" />
<title>ElasticJob 发布指南 :: ShardingSphere</title>
<link href="https://shardingsphere.apache.org/community/css/nucleus.css?1660280484" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/font-awesome.min.css?1660280484" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/hybrid.css?1660280484" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/featherlight.min.css?1660280484" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/perfect-scrollbar.min.css?1660280484" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/auto-complete.css?1660280484" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/theme.css?1660280484" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/hugo-theme.css?1660280484" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/theme-white.css?1660280484" rel="stylesheet">
<script src="https://shardingsphere.apache.org/community/js/jquery-2.x.min.js?1660280484"></script>
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?d5a1dc8dcf63a64ee55b80de01c7fb1a";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-HPVGEN405S"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){window.dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-HPVGEN405S');
</script>
<style type="text/css">
:root #header + #content > #left > #rlblock_left{
display:none !important;
}
</style>
</head>
<body class="" data-url="/cn/contribute/release-elasticjob/">
<div class="change-theme">
<div class="wrap">
<span data-item="retro">
<svg t="1649761460834" class="icon" viewBox="0 0 1243 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2052" width="16" height="16"><path d="M755.093336 61.436797a511.973304 511.973304 0 1 0 207.495466 693.650688l-99.615377-53.757197a398.827204 398.827204 0 1 1-161.637286-540.351253l53.757197-99.615378z" fill="#ffffff" p-id="2053"></path><path d="M1204.971593 188.84501L534.652259 736.217612l-285.242269-364.086159 86.304071-67.653615 216.199012 275.953611 583.649567-476.574007 69.335813 84.987568z" fill="#ffffff" p-id="2054"></path></svg>
复古
</span>
<span data-item="eyehelp">
<svg t="1649761460834" class="icon" viewBox="0 0 1243 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2052" width="16" height="16"><path d="M755.093336 61.436797a511.973304 511.973304 0 1 0 207.495466 693.650688l-99.615377-53.757197a398.827204 398.827204 0 1 1-161.637286-540.351253l53.757197-99.615378z" fill="#ffffff" p-id="2053"></path><path d="M1204.971593 188.84501L534.652259 736.217612l-285.242269-364.086159 86.304071-67.653615 216.199012 275.953611 583.649567-476.574007 69.335813 84.987568z" fill="#ffffff" p-id="2054"></path></svg>
护眼
</span>
<span data-item="haitian">
<svg t="1649761460834" class="icon" viewBox="0 0 1243 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2052" width="16" height="16"><path d="M755.093336 61.436797a511.973304 511.973304 0 1 0 207.495466 693.650688l-99.615377-53.757197a398.827204 398.827204 0 1 1-161.637286-540.351253l53.757197-99.615378z" fill="#ffffff" p-id="2053"></path><path d="M1204.971593 188.84501L534.652259 736.217612l-285.242269-364.086159 86.304071-67.653615 216.199012 275.953611 583.649567-476.574007 69.335813 84.987568z" fill="#ffffff" p-id="2054"></path></svg>
海天
</span>
<span data-item="deep">
<svg t="1649761460834" class="icon" viewBox="0 0 1243 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2052" width="16" height="16"><path d="M755.093336 61.436797a511.973304 511.973304 0 1 0 207.495466 693.650688l-99.615377-53.757197a398.827204 398.827204 0 1 1-161.637286-540.351253l53.757197-99.615378z" fill="#ffffff" p-id="2053"></path><path d="M1204.971593 188.84501L534.652259 736.217612l-285.242269-364.086159 86.304071-67.653615 216.199012 275.953611 583.649567-476.574007 69.335813 84.987568z" fill="#ffffff" p-id="2054"></path></svg>
深邃
</span>
<span data-item="dark">
<svg t="1649761460834" class="icon" viewBox="0 0 1243 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2052" width="16" height="16"><path d="M755.093336 61.436797a511.973304 511.973304 0 1 0 207.495466 693.650688l-99.615377-53.757197a398.827204 398.827204 0 1 1-161.637286-540.351253l53.757197-99.615378z" fill="#ffffff" p-id="2053"></path><path d="M1204.971593 188.84501L534.652259 736.217612l-285.242269-364.086159 86.304071-67.653615 216.199012 275.953611 583.649567-476.574007 69.335813 84.987568z" fill="#ffffff" p-id="2054"></path></svg>
暗黑
</span>
<span class="active">
<svg t="1649761460834" class="icon" viewBox="0 0 1243 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2052" width="16" height="16"><path d="M755.093336 61.436797a511.973304 511.973304 0 1 0 207.495466 693.650688l-99.615377-53.757197a398.827204 398.827204 0 1 1-161.637286-540.351253l53.757197-99.615378z" fill="#ffffff" p-id="2053"></path><path d="M1204.971593 188.84501L534.652259 736.217612l-285.242269-364.086159 86.304071-67.653615 216.199012 275.953611 583.649567-476.574007 69.335813 84.987568z" fill="#ffffff" p-id="2054"></path></svg>
默认
</span>
</div>
</div>
<header>
<div class="wrap">
<a href="https://shardingsphere.apache.org/"><img src="https://shardingsphere.apache.org/document/current/img/logo_v3.png" /></a>
<section id="prefooter">
<ul>
<li>
<a class="padding">
<i class="fa fa-fw fa-language"></i>
<div class="select-style">
<select id="select-language" onchange="location = this.value;">
<option id="en" value="/community/en/contribute/release-elasticjob/">English</option>
<option id="cn" value="/community/cn/contribute/release-elasticjob/" selected>简体中文</option>
</select>
<svg t="1645437162166" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2449" width="32" height="32"><path d="M483.072 714.496l30.165333 30.208 415.957334-415.829333a42.837333 42.837333 0 0 0 0-60.288 42.538667 42.538667 0 0 0-60.330667-0.042667l-355.541333 355.413333-355.242667-355.413333a42.496 42.496 0 0 0-60.288 0 42.837333 42.837333 0 0 0-0.085333 60.330667l383.701333 383.872 1.706667 1.749333z" fill="#3D3D3D" p-id="2450"></path></svg>
</div>
</a>
</li>
</ul>
</section>
</div>
</header>
<div class="wrap">
<nav id="sidebar" class="">
<div id="header-wrapper">
<div class="searchbox">
<label for="search-by"><i class="fa fa-search"></i></label>
<input data-search-input id="search-by" type="text" placeholder="Search...">
<span data-search-clear=""><i class="fa fa-close"></i></span>
</div>
<script type="text/javascript" src="https://shardingsphere.apache.org/community/js/lunr.min.js?1660280484"></script>
<script type="text/javascript" src="https://shardingsphere.apache.org/community/js/auto-complete.js?1660280484"></script>
<script type="text/javascript">
var baseurl = "\/cn";
</script>
<script type="text/javascript" src="https://shardingsphere.apache.org/community/js/search.js?1660280484"></script>
</div>
<div class="highlightable">
<div class="leftMenu">
<ul class="topics">
<li data-nav-id="/cn/contribute/" title="参与和贡献" class="dd-item
parent
">
<a href="https://shardingsphere.apache.org/community/cn/contribute/">
<i class="collapse" style="display:inline; font-family:'courier';">
<svg class="icon icon-down"
style="display: inline-block;"
viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="#777">
<path d="M500.8 604.778667L267.306667 371.392l-45.226667 45.269333 278.741333 278.613334 278.485334-278.613334-45.248-45.248z" p-id="5376" ></path>
</svg>
<svg class="icon icon-right"
style="display: none;"
viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="#777">
<path d="M593.450667 512.128L360.064 278.613333l45.290667-45.226666 278.613333 278.762666L405.333333 790.613333l-45.226666-45.269333z" p-id="5605" ></path>
</svg>
</i>
<b>1. </b>参与和贡献
</a>
<ul>
<li data-nav-id="/cn/contribute/subscribe/" title="订阅指南" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/cn/contribute/subscribe/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
订阅指南
</a>
</li>
<li data-nav-id="/cn/contribute/establish-project/" title="开发环境指南" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/cn/contribute/establish-project/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
开发环境指南
</a>
</li>
<li data-nav-id="/cn/contribute/contributor/" title="贡献者指南" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/cn/contribute/contributor/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
贡献者指南
</a>
</li>
<li data-nav-id="/cn/contribute/committer/" title="提交者指南" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/cn/contribute/committer/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
提交者指南
</a>
</li>
<li data-nav-id="/cn/contribute/code-conduct/" title="开发规范" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/cn/contribute/code-conduct/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
开发规范
</a>
</li>
<li data-nav-id="/cn/contribute/issue-conduct/" title="Issue 提交与处理规范" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/cn/contribute/issue-conduct/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
Issue 提交与处理规范
</a>
</li>
<li data-nav-id="/cn/contribute/document-conduct/" title="文档规范" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/cn/contribute/document-conduct/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
文档规范
</a>
</li>
<li data-nav-id="/cn/contribute/document-contributor/" title="官方文档贡献指南" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/cn/contribute/document-contributor/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
官方文档贡献指南
</a>
</li>
<li data-nav-id="/cn/contribute/release/" title="ShardingSphere 发布指南" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/cn/contribute/release/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
ShardingSphere 发布指南
</a>
</li>
<li data-nav-id="/cn/contribute/release-elasticjob/" title="ElasticJob 发布指南" class="dd-item active">
<a href="https://shardingsphere.apache.org/community/cn/contribute/release-elasticjob/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
ElasticJob 发布指南
</a>
</li>
<li data-nav-id="/cn/contribute/release-elasticjob-ui/" title="ElasticJob-UI 发布指南" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/cn/contribute/release-elasticjob-ui/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
ElasticJob-UI 发布指南
</a>
</li>
<li data-nav-id="/cn/contribute/2fa/" title="2FA" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/cn/contribute/2fa/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
2FA
</a>
</li>
<li data-nav-id="/cn/contribute/icla/" title="签署 iCLA 指南" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/cn/contribute/icla/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
签署 iCLA 指南
</a>
</li>
<li data-nav-id="/cn/contribute/vote/" title="提交者选举流程指南" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/cn/contribute/vote/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
提交者选举流程指南
</a>
</li>
</ul>
</li>
<li data-nav-id="/cn/powered-by/" title="采用公司" class="dd-item
">
<a href="https://shardingsphere.apache.org/community/cn/powered-by/">
<i class="collapse" style="display:inline; font-family:'courier';">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
</i>
<b>2. </b>采用公司
</a>
</li>
<li data-nav-id="/cn/team/" title="团队" class="dd-item
">
<a href="https://shardingsphere.apache.org/community/cn/team/">
<i class="collapse" style="display:inline; font-family:'courier';">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
</i>
<b>3. </b>团队
</a>
</li>
<li data-nav-id="/cn/security/" title="安全" class="dd-item
">
<a href="https://shardingsphere.apache.org/community/cn/security/">
<i class="collapse" style="display:inline; font-family:'courier';">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
</i>
<b>4. </b>安全
</a>
</li>
</ul>
</div>
<a class="padding" href="https://shardingsphere.apache.org/pdf/shardingsphere_docs_cn.pdf">
下载PDF文档
</a>
<section id="footer">
<p></p>
</section>
</div>
</nav>
<section id="body">
<div id="overlay"></div>
<div class="padding highlightable">
<div>
<div id="top-bar">
<div id="top-github-link">
<a class="github-link" title='Edit this page' href="https://github.com/apache/shardingsphere/tree/master/docs/community/content/contribute/release-elasticjob.cn.md" target="blank">
<i class="fa fa-code-fork"></i>
<span id="top-github-link-text">Edit this page</span>
</a>
</div>
<div id="breadcrumbs" itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb">
<span id="sidebar-toggle-span">
<a href="#" id="sidebar-toggle" data-sidebar-toggle="">
<i class="fa fa-bars"></i>
</a>
</span>
<span class="links">
<a href='https://shardingsphere.apache.org/community/cn/'>ShardingSphere</a> > <a href='https://shardingsphere.apache.org/community/cn/contribute/'>参与和贡献</a> > ElasticJob 发布指南
</span>
</div>
</div>
</div>
<div id="chapter">
<div id="body-inner">
<nav id="TableOfContents">
<ul>
<li><a href="#发布准备">发布准备</a>
<ul>
<li><a href="#gpg-设置">GPG 设置</a></li>
<li><a href="#设置-settingsxml-文件">设置 settings.xml 文件</a></li>
</ul>
</li>
<li><a href="#apache-snapshot-发布">Apache Snapshot 发布</a>
<ul>
<li><a href="#部署到-apache-snapshot-仓库">部署到 Apache Snapshot 仓库</a></li>
</ul>
</li>
<li><a href="#apache-release-发布">Apache Release 发布</a>
<ul>
<li><a href="#部署到-apache-maven-中央仓库">部署到 Apache Maven 中央仓库</a></li>
<li><a href="#发布-apache-svn-仓库">发布 Apache SVN 仓库</a></li>
<li><a href="#检查发布结果">检查发布结果</a></li>
<li><a href="#发起投票">发起投票</a></li>
<li><a href="#完成发布">完成发布</a></li>
</ul>
</li>
</ul>
</nav>
<h2 id="发布准备">发布准备</h2>
<h3 id="gpg-设置">GPG 设置</h3>
<p>详情请参见<a href="https://shardingsphere.apache.org/community/cn/contribute/release/">发布指南</a></p>
<h3 id="设置-settingsxml-文件">设置 settings.xml 文件</h3>
<p>将以下模板添加到 <code>~/.m2/settings.xml</code> 中,所有密码需要加密后再填入。
加密设置可参考<a href="http://maven.apache.org/guides/mini/guide-encryption.html">这里</a></p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"><span style="color:#f92672">&lt;settings&gt;</span>
<span style="color:#f92672">&lt;servers&gt;</span>
<span style="color:#f92672">&lt;server&gt;</span>
<span style="color:#f92672">&lt;id&gt;</span>apache.snapshots.https<span style="color:#f92672">&lt;/id&gt;</span>
<span style="color:#f92672">&lt;username&gt;</span> <span style="color:#75715e">&lt;!-- APACHE LDAP 用户名 --&gt;</span> <span style="color:#f92672">&lt;/username&gt;</span>
<span style="color:#f92672">&lt;password&gt;</span> <span style="color:#75715e">&lt;!-- APACHE LDAP 加密后的密码 --&gt;</span> <span style="color:#f92672">&lt;/password&gt;</span>
<span style="color:#f92672">&lt;/server&gt;</span>
<span style="color:#f92672">&lt;server&gt;</span>
<span style="color:#f92672">&lt;id&gt;</span>apache.releases.https<span style="color:#f92672">&lt;/id&gt;</span>
<span style="color:#f92672">&lt;username&gt;</span> <span style="color:#75715e">&lt;!-- APACHE LDAP 用户名 --&gt;</span> <span style="color:#f92672">&lt;/username&gt;</span>
<span style="color:#f92672">&lt;password&gt;</span> <span style="color:#75715e">&lt;!-- APACHE LDAP 加密后的密码 --&gt;</span> <span style="color:#f92672">&lt;/password&gt;</span>
<span style="color:#f92672">&lt;/server&gt;</span>
<span style="color:#f92672">&lt;/servers&gt;</span>
<span style="color:#f92672">&lt;/settings&gt;</span>
</code></pre></div><h2 id="apache-snapshot-发布">Apache Snapshot 发布</h2>
<h3 id="部署到-apache-snapshot-仓库">部署到 Apache Snapshot 仓库</h3>
<p><strong>1. 确保本地构建项目正常</strong></p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">./mvnw clean install
</code></pre></div><p><strong>2. 部署 Snapshot 仓库</strong></p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">./mvnw deploy -DrepositoryId<span style="color:#f92672">=</span>apache.snapshots.https -T1C
</code></pre></div><p><strong>3. 检查 Snapshot 仓库上传结果</strong></p>
<p><a href="https://repository.apache.org/content/groups/snapshots/org/apache/shardingsphere/elasticjob/">https://repository.apache.org/content/groups/snapshots/org/apache/shardingsphere/elasticjob/</a></p>
<h2 id="apache-release-发布">Apache Release 发布</h2>
<h3 id="部署到-apache-maven-中央仓库">部署到 Apache Maven 中央仓库</h3>
<p><strong>1. 更新版本说明和示例版本</strong></p>
<p>在 Github 主干上更新如下文件,并提交 PR 到主干:</p>
<pre><code>https://github.com/apache/shardingsphere-elasticjob/blob/master/RELEASE-NOTES.md
</code></pre><p>更新 <code>examples</code> 模块的 pom,将版本由 ${CURRENT.VERSION} 替换为 ${RELEASE.VERSION}。</p>
<p><strong>2. 创建发布分支</strong></p>
<p>假设从 Github 下载的 ElasticJob 源代码在 <code>~/elasticjob/</code> 目录;假设即将发布的版本为 <code>${RELEASE.VERSION}</code>
创建 <code>${RELEASE.VERSION}-release</code> 分支,接下来的操作都在该分支进行。</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"><span style="color:#75715e">## ${name}为源码所在分支,如:master,dev-4.x</span>
git clone --branch <span style="color:#e6db74">${</span>name<span style="color:#e6db74">}</span> https://github.com/apache/shardingsphere-elasticjob.git ~/elasticjob
cd ~/elasticjob/
git pull
git checkout -b <span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-release
git push origin <span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-release
</code></pre></div><p><strong>3. 发布预校验</strong></p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">mvn release:prepare -Prelease -Darguments<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;-DskipTests&#34;</span> -DautoVersionSubmodules<span style="color:#f92672">=</span>true -DdryRun<span style="color:#f92672">=</span>true -Dusername<span style="color:#f92672">=</span><span style="color:#e6db74">${</span>Github用户名<span style="color:#e6db74">}</span>
</code></pre></div><p>-Prelease: 选择 release 的 profile,这个 profile 会打包所有源码和 jar 文件。</p>
<p>-DautoVersionSubmodules=true:作用是发布过程中版本号只需要输入一次,不必为每个子模块都输入一次。</p>
<p>-DdryRun=true:演练,即不产生版本号提交,不生成新的 tag。</p>
<p><strong>4. 准备发布</strong></p>
<p>首先清理发布预校验本地信息。</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">mvn release:clean
</code></pre></div><div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">mvn release:prepare -Prelease -Darguments<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;-DskipTests&#34;</span> -DautoVersionSubmodules<span style="color:#f92672">=</span>true -DpushChanges<span style="color:#f92672">=</span>false -Dusername<span style="color:#f92672">=</span><span style="color:#e6db74">${</span>Github用户名<span style="color:#e6db74">}</span>
</code></pre></div><p>和上一步演练的命令基本相同,去掉了 -DdryRun=true 参数。</p>
<p>-DpushChanges=false:不要将修改后的版本号和 tag 自动提交至 Github。</p>
<p>将本地文件检查无误后,提交至 Github。</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">git push origin <span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-release
git push origin --tags
</code></pre></div><p><strong>5. 部署发布</strong></p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">mvn release:perform -Prelease -Darguments<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;-DskipTests&#34;</span> -DautoVersionSubmodules<span style="color:#f92672">=</span>true -Dusername<span style="color:#f92672">=</span><span style="color:#e6db74">${</span>Github用户名<span style="color:#e6db74">}</span>
</code></pre></div><p>执行完该命令后,待发布版本会自动上传到 Apache 的临时筹备仓库 (staging repository)。
访问 <a href="https://repository.apache.org/#stagingRepositories,">https://repository.apache.org/#stagingRepositories,</a> 使用 Apache 的 LDAP 账户登录后,就会看到上传的版本,<code>Repository</code> 列的内容即为 ${STAGING.REPOSITORY}。
点击 <code>Close</code> 来告诉 Nexus 这个构建已经完成,只有这样该版本才是可用的。
如果电子签名等出现问题,<code>Close</code> 会失败,可以通过 <code>Activity</code> 查看失败信息。</p>
<h3 id="发布-apache-svn-仓库">发布 Apache SVN 仓库</h3>
<p><strong>1. 检出 shardingsphere 发布目录</strong></p>
<p>如无本地工作目录,则先创建本地工作目录。</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">mkdir -p ~/ss_svn/dev/
cd ~/ss_svn/dev/
</code></pre></div><p>创建完毕后,从 Apache SVN 检出 shardingsphere 发布目录。</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">svn --username<span style="color:#f92672">=</span><span style="color:#e6db74">${</span>APACHE LDAP 用户名<span style="color:#e6db74">}</span> co https://dist.apache.org/repos/dist/dev/shardingsphere
cd ~/ss_svn/dev/shardingsphere
</code></pre></div><p><strong>2. 添加 gpg 公钥</strong></p>
<p>仅第一次部署的账号需要添加,只要 <code>KEYS</code> 中包含已经部署过的账户的公钥即可。</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">gpg -a --export <span style="color:#e6db74">${</span>GPG用户名<span style="color:#e6db74">}</span> &gt;&gt; KEYS
</code></pre></div><p><strong>3. 将待发布的内容添加至 SVN 目录</strong></p>
<p>创建版本号目录。</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">mkdir -p ~/ss_svn/dev/shardingsphere/elasticjob-<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>
cd ~/ss_svn/dev/shardingsphere/elasticjob-<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>
</code></pre></div><p>将源码包和二进制包添加至 SVN 工作目录。</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">cp -f ~/elasticjob/elasticjob-distribution/elasticjob-src-distribution/target/*.zip* ~/ss_svn/dev/shardingsphere/elasticjob-<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>
cp -f ~/elasticjob/elasticjob-distribution/elasticjob-lite-distribution/target/*.tar.gz* ~/ss_svn/dev/shardingsphere/elasticjob-<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>
cp -f ~/elasticjob/elasticjob-distribution/elasticjob-cloud-executor-distribution/target/*.tar.gz* ~/ss_svn/dev/shardingsphere/elasticjob-<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>
cp -f ~/elasticjob/elasticjob-distribution/elasticjob-cloud-scheduler-distribution/target/*.tar.gz* ~/ss_svn/dev/shardingsphere/elasticjob-<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>
</code></pre></div><p><strong>4. 提交 Apache SVN</strong></p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">svn add *
svn --username<span style="color:#f92672">=</span><span style="color:#e6db74">${</span>APACHE LDAP 用户名<span style="color:#e6db74">}</span> commit -m <span style="color:#e6db74">&#34;release elasticjob-</span><span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</code></pre></div><h3 id="检查发布结果">检查发布结果</h3>
<p><strong>检查 sha512 哈希</strong></p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">shasum -c apache-shardingsphere-elasticjob-<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-*.sha512
</code></pre></div><p><strong>检查 gpg 签名</strong></p>
<p>首先导入发布人公钥。从 svn 仓库导入 KEYS 到本地环境。(发布版本的人不需要再导入,帮助做验证的人需要导入,用户名填发版人的即可)。</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">curl https://dist.apache.org/repos/dist/dev/shardingsphere/KEYS &gt;&gt; KEYS
gpg --import KEYS
gpg --edit-key <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>发布人的gpg用户名<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
&gt; trust
Please decide how far you trust this user to correctly verify other users<span style="color:#e6db74">&#39; keys
</span><span style="color:#e6db74">(by looking at passports, checking fingerprints from different sources, etc.)
</span><span style="color:#e6db74">
</span><span style="color:#e6db74"> 1 = I don&#39;</span>t know or won<span style="color:#960050;background-color:#1e0010">&#39;</span>t say
2 <span style="color:#f92672">=</span> I <span style="color:#66d9ef">do</span> NOT trust
3 <span style="color:#f92672">=</span> I trust marginally
4 <span style="color:#f92672">=</span> I trust fully
5 <span style="color:#f92672">=</span> I trust ultimately
m <span style="color:#f92672">=</span> back to the main menu
Your decision? <span style="color:#ae81ff">5</span>
&gt; save
</code></pre></div><p>然后进行 gpg 签名检查。</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">gpg --verify apache-shardingsphere-elasticjob-<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-src.zip.asc apache-shardingsphere-elasticjob-<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-src.zip
gpg --verify apache-shardingsphere-elasticjob-<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-lite-bin.tar.gz.asc apache-shardingsphere-elasticjob-<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-lite-bin.tar.gz
gpg --verify apache-shardingsphere-elasticjob-<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-cloud-executor-bin.tar.gz.asc apache-shardingsphere-elasticjob-<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-cloud-executor-bin.tar.gz
gpg --verify apache-shardingsphere-elasticjob-<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-cloud-scheduler-bin.tar.gz.asc apache-shardingsphere-elasticjob-<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-cloud-scheduler-bin.tar.gz
</code></pre></div><p><strong>检查发布文件内容</strong></p>
<p><strong>对比源码包与 Github 上 tag 的内容差异</strong></p>
<pre><code>curl -Lo tag-${RELEASE.VERSION}.zip https://github.com/apache/shardingsphere-elasticjob/archive/${RELEASE.VERSION}.zip
unzip tag-${RELEASE.VERSION}.zip
unzip apache-shardingsphere-elasticjob-${RELEASE.VERSION}-src.zip
diff -r apache-shardingsphere-elasticjob-${RELEASE.VERSION}-src-release shardingsphere-elasticjob-${RELEASE.VERSION}
</code></pre><p><strong>检查源码包的文件内容</strong></p>
<ul>
<li>检查源码包是否包含由于包含不必要文件,致使 tarball 过于庞大;</li>
<li>存在 <code>LICENSE</code><code>NOTICE</code> 文件;</li>
<li><code>NOTICE</code> 文件中的年份正确;</li>
<li>只存在文本文件,不存在二进制文件;</li>
<li>所有文件的开头都有 ASF 许可证;</li>
<li>能够正确编译,单元测试可以通过(./mvnw -T 1C install);</li>
<li>检查是否有多余文件或文件夹,例如空文件夹等。</li>
</ul>
<p><strong>检查二进制包的文件内容</strong></p>
<p>解压缩
<code>apache-shardingsphere-elasticjob-${RELEASE.VERSION}-lite-bin.tar.gz</code>
<code>apache-shardingsphere-elasticjob-${RELEASE.VERSION}-cloud-executor-bin.tar.gz</code>
<code>apache-shardingsphere-elasticjob-${RELEASE.VERSION}-cloud-scheduler-bin.tar.gz</code>
进行如下检查:</p>
<ul>
<li>存在 <code>LICENSE</code><code>NOTICE</code> 文件;</li>
<li><code>NOTICE</code> 文件中的年份正确;</li>
<li>所有文本文件开头都有 ASF 许可证;</li>
<li>检查第三方依赖许可证:
<ul>
<li>第三方依赖的许可证兼容;</li>
<li>所有第三方依赖的许可证都在 <code>LICENSE</code> 文件中声明;</li>
<li>依赖许可证的完整版全部在 <code>license</code> 目录;</li>
<li>如果依赖的是 Apache 许可证并且存在 <code>NOTICE</code> 文件,那么这些 <code>NOTICE</code> 文件也需要加入到版本的 <code>NOTICE</code> 文件中。</li>
</ul>
</li>
</ul>
<h3 id="发起投票">发起投票</h3>
<p><strong>投票阶段</strong></p>
<ol>
<li>
<p>ShardingSphere 社区投票,发起投票邮件到 <code>dev@shardingsphere.apache.org</code>。PMC 需要先按照文档检查版本的正确性,然后再进行投票。
经过至少 72 小时并统计到 3 个 <code>+1 PMC member</code> 票后,即可进入下一阶段的投票。</p>
</li>
<li>
<p>宣布投票结果,发起投票结果邮件到 <code>dev@shardingsphere.apache.org</code></p>
</li>
</ol>
<p><strong>投票模板</strong></p>
<ol>
<li>ShardingSphere 社区投票模板</li>
</ol>
<p>标题:</p>
<pre><code>[VOTE] Release Apache ShardingSphere ElasticJob-${RELEASE.VERSION}
</code></pre><p>正文:</p>
<pre><code>Hello ShardingSphere Community,
This is a call for vote to release Apache ShardingSphere ElasticJob-${RELEASE.VERSION}
Release notes:
https://github.com/apache/shardingsphere-elasticjob/blob/master/RELEASE-NOTES.md
The release candidates:
https://dist.apache.org/repos/dist/dev/shardingsphere/elasticjob-${RELEASE.VERSION}/
Maven 2 staging repository:
https://repository.apache.org/content/repositories/${STAGING.REPOSITORY}/org/apache/shardingsphere/
Git tag for the release:
https://github.com/apache/shardingsphere-elasticjob/tree/${RELEASE.VERSION}/
Release Commit ID:
https://github.com/apache/shardingsphere-elasticjob/commit/xxxxxxxxxxxxxxxxxxxxxxx
Keys to verify the Release Candidate:
https://dist.apache.org/repos/dist/dev/shardingsphere/KEYS
Look at here for how to verify this release candidate:
https://shardingsphere.apache.org/community/en/contribute/release-elasticjob/
GPG user ID:
${YOUR.GPG.USER.ID}
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
PMC vote is +1 binding, all others is +1 non-binding.
Checklist for reference:
[ ] Download links are valid.
[ ] Checksums and PGP signatures are valid.
[ ] Source code distributions have correct names matching the current release.
[ ] LICENSE and NOTICE files are correct for each ShardingSphere repo.
[ ] All files have license headers if necessary.
[ ] No compiled archives bundled in source archive.
</code></pre><ol start="2">
<li>宣布投票结果模板:</li>
</ol>
<p>标题:</p>
<pre><code>[RESULT][VOTE] Release Apache ShardingSphere ElasticJob-${RELEASE.VERSION}
</code></pre><p>正文:</p>
<pre><code>We’ve received 3 +1 binding votes and one +1 non-binding vote:
+1 binding, xxx
+1 binding, xxx
+1 binding, xxx
+1 non-binding, xxx
Thank you everyone for taking the time to review the release and help us.
I will process to publish the release and send ANNOUNCE.
</code></pre><h3 id="完成发布">完成发布</h3>
<p><strong>1. 将源码、二进制包以及 KEYS 从 svn 的 dev 目录移动到 release 目录</strong></p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">svn mv https://dist.apache.org/repos/dist/dev/shardingsphere/elasticjob-<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span> https://dist.apache.org/repos/dist/release/shardingsphere/ -m <span style="color:#e6db74">&#34;transfer packages for elasticjob-</span><span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
svn delete https://dist.apache.org/repos/dist/release/shardingsphere/KEYS -m <span style="color:#e6db74">&#34;delete KEYS&#34;</span>
svn cp https://dist.apache.org/repos/dist/dev/shardingsphere/KEYS https://dist.apache.org/repos/dist/release/shardingsphere/ -m <span style="color:#e6db74">&#34;transfer KEYS for elasticjob-</span><span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</code></pre></div><p><strong>2. 在 Apache Staging 仓库找到 ShardingSphere 并点击 <code>Release</code></strong></p>
<p><strong>3. 合并 Github 的 release 分支到 <code>master</code>, 合并完成后删除 release 分支</strong></p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">git checkout master
git merge origin/<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-release
git pull
git push origin master
git push --delete origin <span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-release
git branch -d <span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-release
</code></pre></div><p><strong>4. 发布 Docker</strong></p>
<p>4.1 准备工作</p>
<p>本地安装 Docker,并启动服务。</p>
<p>4.2 编译 Docker 镜像</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">git checkout <span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>
cd ~/elasticjob/elasticjob-distribution/elasticjob-cloud-scheduler-distribution/
mvn clean package -Prelease,docker
</code></pre></div><p>4.3 给本地 Docker 镜像打标记</p>
<p>通过 <code>docker images</code> 查看到 IMAGE ID,例如为:e9ea51023687。</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">docker tag e9ea51023687 apache/shardingsphere-elasticjob-cloud-scheduler:latest
docker tag e9ea51023687 apache/shardingsphere-elasticjob-cloud-scheduler:<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>
</code></pre></div><p>4.4 发布 Docker 镜像</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">docker login
docker push apache/shardingsphere-elasticjob-cloud-scheduler:latest
docker push apache/shardingsphere-elasticjob-cloud-scheduler:<span style="color:#e6db74">${</span>RELEASE_VERSION<span style="color:#e6db74">}</span>
</code></pre></div><p>4.5 确认发布成功</p>
<p>登录 <a href="https://hub.docker.com/r/apache/shardingsphere-elasticjob-cloud-scheduler/">Docker Hub</a> 查看是否有发布的镜像。</p>
<p><strong>5. GitHub 版本发布</strong></p>
<p><a href="https://github.com/apache/shardingsphere-elasticjob/releases">GitHub Releases</a> 页面的 <code>${RELEASE_VERSION}</code> 版本上点击 <code>Edit</code></p>
<p>编辑版本号及版本说明,并点击 <code>Publish release</code></p>
<p><strong>6. 更新下载页面</strong></p>
<p>等待并确认新的发布版本同步至 Apache 镜像后,更新如下页面:</p>
<p><a href="https://shardingsphere.apache.org/elasticjob/current/en/downloads/">https://shardingsphere.apache.org/elasticjob/current/en/downloads/</a></p>
<p><a href="https://shardingsphere.apache.org/elasticjob/current/cn/downloads/">https://shardingsphere.apache.org/elasticjob/current/cn/downloads/</a></p>
<p>GPG 签名文件和哈希校验文件的下载连接应该使用这个前缀:<code>https://downloads.apache.org/shardingsphere/</code></p>
<p><code>最新版本</code> 中保留一个最新的版本。</p>
<p><strong>7. 邮件通知版本发布完成</strong></p>
<p>发送邮件到 <code>dev@shardingsphere.apache.org</code><code>announce@apache.org</code> 通知完成版本发布。</p>
<p>通知邮件模板:</p>
<p>标题:</p>
<pre><code>[ANNOUNCE] Apache ShardingSphere ElasticJob-${RELEASE.VERSION} available
</code></pre><p>正文:</p>
<pre><code>Hi all,
Apache ShardingSphere Team is glad to announce the new release of Apache ShardingSphere ElasticJob-${RELEASE.VERSION}.
ElasticJob is a distributed scheduling solution consisting of two separate projects, ElasticJob-Lite and ElasticJob-Cloud.
Through the functions of flexible scheduling, resource management and job management, it creates a distributed scheduling solution suitable for Internet scenarios, and provides diversified job ecosystem through open architecture design. It uses a unified job API for each project. Developers only need code one time and can deploy at will.
ElasticJob became an Apache ShardingSphere Sub project on May 28 2020.
Download Links: https://shardingsphere.apache.org/elasticjob/current/en/downloads/
Release Notes: https://github.com/apache/shardingsphere-elasticjob/blob/master/RELEASE-NOTES.md
Website: http://shardingsphere.apache.org/elasticjob/
ShardingSphere-ElasticJob Resources:
- Issue: https://github.com/apache/shardingsphere-elasticjob/issues/
- Mailing list: dev@shardingsphere.apache.org
- Documents: https://shardingsphere.apache.org/elasticjob/current/en/overview/
- Apache ShardingSphere Team
</code></pre>
<footer class=" footline" >
</footer>
</div>
</div>
</div>
<div id="navigation" >
<a class="nav nav-prev" href="https://shardingsphere.apache.org/community/cn/contribute/release/" title="ShardingSphere 发布指南"> <i class="fa fa-long-arrow-left fa-lg"></i> 上一篇</a>
<a class="nav nav-next" href="https://shardingsphere.apache.org/community/cn/contribute/release-elasticjob-ui/" title="ElasticJob-UI 发布指南" style="margin-right: 0px;">下一篇 <i class="fa fa-long-arrow-right fa-lg"></i></a>
</div>
</section>
</div>
<div style="left: -1000px; overflow: scroll; position: absolute; top: -1000px; border: none; box-sizing: content-box; height: 200px; margin: 0px; padding: 0px; width: 200px;">
<div style="border: none; box-sizing: content-box; height: 200px; margin: 0px; padding: 0px; width: 200px;"></div>
</div>
<script src="https://shardingsphere.apache.org/community/js/clipboard.min.js?1660280484"></script>
<script src="https://shardingsphere.apache.org/community/js/perfect-scrollbar.min.js?1660280484"></script>
<script src="https://shardingsphere.apache.org/community/js/perfect-scrollbar.jquery.min.js?1660280484"></script>
<script src="https://shardingsphere.apache.org/community/js/jquery.sticky.js?1660280484"></script>
<script src="https://shardingsphere.apache.org/community/js/featherlight.min.js?1660280484"></script>
<script src="https://shardingsphere.apache.org/community/js/html5shiv-printshiv.min.js?1660280484"></script>
<script src="https://shardingsphere.apache.org/community/js/highlight.pack.js?1660280484"></script>
<script>hljs.initHighlightingOnLoad();</script>
<script src="https://shardingsphere.apache.org/community/js/modernizr.custom.71422.js?1660280484"></script>
<script src="https://shardingsphere.apache.org/community/js/learn.js?1660280484"></script>
<script src="https://shardingsphere.apache.org/community/js/hugo-learn.js?1660280484"></script>
<script>
try{
function log(fileName, category, locale){
window._hmt.push(['_trackEvent', 'document', 'download', locale ? 'PDF_'+locale : fileName]);
gtag('event', 'Downloads', {
'event_category' : locale ? 'PDF' : category,
'event_label' : locale ? locale+'.pdf' : fileName
});
}
$('.padding[href*=shardingsphere]').on('click', function(){
var locale = /cn/.test(location.pathname) ?'cn':'en';
log('','', locale)
})
function getFileName(str){
var strs = str.split('/');
return strs[strs.length - 1]
}
$('a[href$="src.zip"]').on('click', function(){
log(getFileName($(this).attr('href')), "SRC")
})
$('a[href$="zip.asc"]').on('click', function(){
log(getFileName($(this).attr('href')), "ASC")
})
$('a[href$="zip.sha512"]').on('click', function(){
log(getFileName($(this).attr('href')), "SHA512")
})
$('a[href$="tar.gz.asc"]').on('click', function(){
log(getFileName($(this).attr('href')), "ASC")
})
$('a[href$="tar.gz.sha512"]').on('click', function(){
log(getFileName($(this).attr('href')), "SHA512")
})
$('a[href$="tar.gz"]').on('click', function(){
log(getFileName($(this).attr('href')), "TAR")
})
}catch(ex){}
</script>
</body>
</html>