提交 27d62411 编写于 作者: Y yJunS

Automated deployment to GitHub Pages on 1574402711

上级 babc0de9
......@@ -1838,16 +1838,13 @@ RU5ErkJggg==" />
<a href="/event/shanghai-2019-09/" class="tile lazyload cover dib f4 ml1 mr4 bg-black relative mw-100 shadow-5">
<img width="400px" height="200px" src="/images/meetup/shanghai.jpeg"></img>
<a href="/event/beijing-2019-08-24/" class="tile lazyload cover dib f4 ml1 mr4 bg-black relative mw-100 shadow-5">
<img width="400px" height="200px" src="/images/meetup/kaiyuan.jpg"></img>
</a>
<a href="/event/beijing-2019-07-27/" class="tile lazyload cover dib f4 ml1 mr4 bg-black relative mw-100 shadow-5">
<img width="400px" height="200px" src="/images/meetup/ci-cd.jpeg"></img>
</a>
......@@ -1855,13 +1852,16 @@ RU5ErkJggg==" />
<a href="/event/beijing-2019-08-24/" class="tile lazyload cover dib f4 ml1 mr4 bg-black relative mw-100 shadow-5">
<img width="400px" height="200px" src="/images/meetup/kaiyuan.jpg"></img>
<a href="/event/shanghai-2019-09/" class="tile lazyload cover dib f4 ml1 mr4 bg-black relative mw-100 shadow-5">
<img width="400px" height="200px" src="/images/meetup/shanghai.jpeg"></img>
</a>
<a href="/event/beijing-2019-06-22/" class="tile lazyload cover dib f4 ml1 mr4 bg-black relative mw-100 shadow-5">
<img width="400px" height="200px" src="/images/meetup/ci-cd.jpeg"></img>
</a>
......
......@@ -3132,19 +3132,6 @@
"original": "",
"poster": ""
},
{
"uri": "https://jenkins-zh.github.io/tutorial/use-cases/",
"title": "use-cases",
"type": "tutorial",
"date": "0001-01-01 00:00:00 +0000 UTC",
"tags": [],
"description": "",
"content": "",
"auhtor": "",
"translator": "",
"original": "",
"poster": ""
},
{
"uri": "https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-what-is-cicd/",
"title": "什么是 CI/CD?",
......@@ -3158,6 +3145,19 @@
"original": "https://dzone.com/articles/what-is-cicd",
"poster": ""
},
{
"uri": "https://jenkins-zh.github.io/tutorial/best-practice/android/android-best-practice/",
"title": "使用 Jenkins 构建 Android 应用",
"type": "tutorial",
"date": "0001-01-01 00:00:00 +0000 UTC",
"tags": [],
"description": "",
"content": " 本教程将展示 Jenkins 如何使用 Jenkins 和 Gradle 构建一个简单的 Android 应用程序。\n如果你是一个对 CI/CD 概念不了解的 Android 开发者,或者你熟悉这些概念却不知道如何使用 Jenkins 完成构建,那么本教程很适合你。你将在 GitHub 上获取一个简单的 Android 应用项目,并包含单元测试。\n耗时:本教程需要 20-40 分钟来完成(假设你的机器已经满足配置要求)。\n配置要求 对于本教程,您将需要:\n 安装有 macOS、Linux 或 Windows 操作系统的机器,并拥有以下配置:\n 最小 256 MB 内存,推荐 512MB 以上。\n 10 GB 硬盘空间,用于安装 Jenkins,您的 Docker 镜像和容器。\n 安装有以下软件:\n Docker - 在安装 Jenkins 页面的安装 Docker 章节阅读更多信息。\n注意:如果您使用 Linux,本教程假定您没有以 root 用户的身份运行 Docker 命令,而是使用单个用户帐户访问本教程中使用的其他工具。\n Git 和 GitHub Desktop。\n 在 Docker 中运行 Jenkins 在本教程中,将 Jenkins 作为 Docker 容器并从 jenkinsci/blueocean Docker 镜像中运行。\n要在 Docker 中运行 Jenkins,请遵循下面的 macOS 和 Linux 或 Windows 相关文档说明进行操作。\n你可以在 Docker 和 Installing Jenkins 页面的 Downloading and running Jenkins in Docker 部分阅读更多有关 Docker 容器和镜像概念的信息。\n在 macOS 和 Linux 系统上 打开终端窗口。\n 使用下面的 docker run 命令运行 jenkinsci/blueocean 镜像作为 Docker 中的一个容器(记住,如果本地没有镜像,这个命令会自动下载):\n docker run \\ --rm \\ -u root \\ -p 8080:8080 \\ -v jenkins-data:/var/jenkins_home \\ -v /var/run/docker.sock:/var/run/docker.sock \\ -v \u0026quot;$HOME\u0026quot;:/home \\ jenkinsci/blueocean ① `-v jenkins-data:/var/jenkins_home` 表示将容器中的 /var/jenkins_home 目录映射到 Docker volume,并将其命名为 jenkins-data。如果该卷不存在,那么 docker run 命令会自动为你创建卷。 ② `-v \u0026quot;$HOME\u0026quot;:/home` 将主机上的 $HOME 目录(即你的本地)映射到(通常是 /Users/\u0026lt;your-username\u0026gt; 目录)到容器的 /home 目录。 继续向导 在 Windows 系统 打开命令提示窗口。\n 使用下面的 docker run 命令运行 jenkinsci/blueocean 镜像作为 Docker 中的一个容器(记住,如果本地没有镜像,这个命令会自动下载):\n docker run ^ --rm ^ -u root ^ -p 8080:8080 ^ -v jenkins-data:/var/jenkins_home ^ -v /var/run/docker.sock:/var/run/docker.sock ^ -v \u0026quot;%HOMEPATH%\u0026quot;:/home ^ jenkinsci/blueocean 对这些选项的解释,请参考上面的 macOS 和 Linux 说明。 继续安装向导。 访问 Jenkins/Blue Ocean Docker 容器 如果你有一些使用 Docker 的经验,希望或需要使用 docker exec 命令通过一个终端/命令提示符来访问 Jenkins/Blue Ocean Docker 容器,你可以添加如 \u0026ndash;name jenkins-tutorials 选项(与上面的 docker run),这将会给 Jenkins/Blue Ocean Docker 容器一个名字 \u0026ldquo;jenkins-tutorials\u0026rdquo;。\n这意味着你可以通过 docker exec 命令访问 Jenkins/Blue Ocean 容器(通过一个单独的终端/命令提示窗口),例如:\ndocker exec -it jenkins-tutorials bash 安装向导 在你访问 Jenkins 之前,你需要执行一些快速的\u0026rdquo;一次性\u0026rdquo;步骤。\n解锁 Jenkins 当你第一次访问一个新的 Jenkins 实例时,要求你使用自动生成的密码对其进行解锁。\n 当在终端/命令提示窗口出现两组星号时,浏览 http://localhost:8080 并等待 Unlock Jenkins 页面出现。\n 再次从终端/命令提示窗口,复制自动生成的字母数字密码(在两组星号之间)。\n 在 Unlock Jenkins 页面,粘贴该密码到 Administrator password 字段并点击 Continue。\n 使用插件自定义 Jenkins 在解锁 Jenkins 后,Customize Jenkins 页面出现。\n在该页面,点击 Install suggested plugins。\n安装向导显示了正在配置的 Jenkins 的进程,以及建议安装的插件,这个过程可能需要几分钟。\n创建第一个管理员用户 最后,Jenkins 要求创建你的第一个管理员用户。\n 当 Create First Admin User 页面出现,在相应的字段中指定你的详细消息并点击 Save and Finish。\n 当 Jenkins is ready 页面出现,点击 Start using Jenkins。\n注意:该页面可能表明 Jenkins is almost ready!如果相反,点击 Restart。\n 如果该页面在一分钟后没有自动刷新,使用你的 web 浏览器手动刷新。\n 如果需要,登录 Jenkins,你就可以开始使用 Jenkins 了!\n停止和重启 Jenkins 在本教程的其余部分,你可以通过在终端/命令提示窗口输入 Ctrl-C 停止 Jenkins/Blue Ocean Docker 容器,也可以运行上面 docker run ... 命令启动容器。\n要重启 Jenkins/Blue Ocean Docker 容器:\n 在上面的 macOS、Linux 或 Windows 上运行相同的 docker run \u0026hellip; 命令。\n注意:如果有更新的话,该进程会更新 jenkinsci/blueocean Docker 镜像。\n 浏览 http://localhost:8080。\n 等待直到登录页面出现并登陆。\n Fork 和 clone GitHub 示例仓库 通过将应用程序源代码所在的示例仓库 fork 到你自己的 GitHub 账号中,并 clone 到本地,你就可以获取一简单的 Android 应用程序。\n 请确保你登陆了你的 GitHub 账户。如果你还没有 GitHub 账户,你可以在 GitHub 网站免费注册一个账户。\n 将示例仓库 jenkins-android-sample fork 到你的账户的 GitHub 仓库中。\n 将你的 GitHub 账户中的 jenkins-android-sample 仓库 clone 到你的本地机器,确保你的项目路径为:\n macOS 系统配置为 /Users/\u0026lt;your-username\u0026gt;/Documents/GitHub/jenkins-android-sample\n Linux 系统配置为 /home/\u0026lt;your-username\u0026gt;/GitHub/jenkins-android-sample\n Windows 系统配置为 C:\\Users\\\u0026lt;your-username\u0026gt;\\Documents\\GitHub\\jenkins-android-sample\n 在 Jenkins 中创建你的流水线项目 回到 Jenkins,如果有必要的话重新登录,点击 Welcome to Jenkins!下方的 create new jobs。\n注意:如果你无法看见以上内容,点击左上方的 New Item。\n 在 Enter an item name 域中,为新的流水线项目指定名称(例如 jenkins-android-sample)。\n 向下滚动并单击 Pipeline,然后单击页面末尾的 OK。\n 4.(可选)在下一页中,在 Description 字段中填写流水线的简要描述。\n 点击页面顶部的 Pipeline 选项卡,向下滚动到 Pipeline 部分。\n 在 Definition 域中,选择 Pipeline script from SCM 选项。此选项指示 Jenkins 从源代码管理(SCM)仓库获取你的流水线,这里的仓库就是你 clone 到本地的 Git 仓库。\n 在 SCM 域中,选择 Git。\n 在 Repository URL 域中,填写你本地仓库的目录路径,这是从你主机上的用户账户 home 目录映射到 Jenkins 容器的 /home 目录:\n MacOS系统 - /home/Documents/GitHub/jenkins-android-sample Linux系统 - /home/GitHub/jenkins-android-sample Windows系统 - /home/Documents/GitHub/jenkins-android-sample 点击 Save 保存你的流水线项目。你现在可以开始创建你的 Jenkinsfile,这些文件会被添加到你的本地仓库。\n 创建 Jenkinsfile 为初始流水线 现在我们将开始创建初始流水线,它将使用 Jenkins 构建你的 Android 应用程序。你的流水线将被创建为 Jenkinsfile,它将被提交到你本地的 Git 仓库(jenkins-android-sample)。\n首先,创建一个初始流水线来下载 Android 编译环境的 Docker 镜像,并将其作为 Docker 容器运行。同时添加一个 \u0026ldquo;Build\u0026rdquo; 阶段到流水线中,用于协调整个过程。\n 使用你最称手的文本编辑器或者 IDE,在你本地的 jenkins-android-sample Git 仓库的根目录创建并保存一个名为 Jenkinsfile 的文本文件。\n 复制以下声明式流水线代码并粘贴到 Jenkinsfile 文件中:\n pipeline{ agent { docker { image 'allbears/jenkins-android:1.0.1' //① } } stages { stage('Build'){ steps { sh './gradlew clean \u0026amp;\u0026amp; rm -rf ./app/build/' //② sh './gradlew assembleRelease' //③ } } } } ① 这里的 image 参数是用来下载 allbears/jenkins-android:1.0.1 Docker 镜像(如果你的机器还没下载过它)并将该镜像作为单独的容器运行。你也可以用 `docker pull allbears/jenkins-android:1.0.1` 命令预先将镜像下载到你的宿主机上。 ② 这里的 sh step 是在编译前进行一些准备动作,对你的工程环境进行清理,确保工作时,编译工程环境干净。 ③ 这里的 sh step 运行的是一个 gradle 构建 release 包的命令。 保存对 Jenkinsfile 的修改并且将其提交到你本地的 jenkins-android-sample Git 仓库。例如,在 jenkins-android-sample 目录下,运行以下命令:\ngit add .\n继续运行:\ngit commit -m \u0026ldquo;Add initial Jenkinsfile\u0026rdquo;\n 再次回到 Jenkins,如果有必要的话重新登录,点击左侧的 Open Blue Ocean 进入 Jenkins 的 Blue Ocean 界面。\n 在 This job has not been run 消息框中,点击 Run,然后快速点击右下角出现的 OPEN 链接,观察 Jenkins 运行你的流水线项目。如果你不能点击 OPEN 链接,点击 Blue Ocean 主界面的这一行来使用这一特性。\n注意:你可能需要几分钟时间等待第一次运行完成。在 clone 了你的本地 jenkins-android-sample Git 仓库后,Jenkins 接下来做了以下动作,构建过程如图所示:\n 将项目排入队列等待在 agent 上运行。\n 下载 jenkins-android Docker 镜像,并且将其运行在 Docker 中的一个容器中。\n 执行 assembleRelease 包构建 Release 包。\n 构建成功结束后,该界面将会变成绿色的,构建后的产物将会保存在 /var/jenkins_home/workspace/jenkins-android-sample/app/build/outputs/apk/release 目录下。\n点击上面的 X 就可以回到主界面。\n增加单元测试阶段 打开你的 Jenkinsfile 文件,编辑。 下面的代码复制到你的 Jenkinsflie 中并置于 Build 阶段下方,保存。 stage('UnitTest'){ steps { sh './gradlew test' } } ① `stage('UnitTest')` 这里增加了一个 UnitTest 的 stage,之后会出现在 Jenkins UI 上。 ② `sh './gradlew test'` 这里的 sh step 运行的是一个 gradle 执行单元测试的命令,该命令执行之后会进行单元测试。 最终代码如下所示:\npipeline{ agent { docker { image 'allbears/jenkins-android:1.0.1' } } stages { stage('Build'){ steps { sh './gradlew clean \u0026amp;\u0026amp; rm -rf ./app/build/' sh './gradlew assembleRelease' } } stage('UnitTest'){ steps { sh './gradlew test' } } } } 继续 保存对 Jenkinsfile 的修改并将其提交到你的本地 jenkins-android-sample Git 仓库。例如,在 jenkins-android-sample 目录下,运行以下命令:\ngit add .\n继续运行:\ngit commit -m \u0026ldquo;Add \u0026lsquo;Test\u0026rsquo; stage\u0026rdquo;\n 再次回到 Jenkins,如果有必要的话重新登录,进入 Jenkins 的 Blue Ocean 界面。\n 点击上方的运行,然后快速点击右下方出现的 OPEN 链接,观察 Jenkins 运行你修改过的流水线项目。如果你不能点击 OPEN 链接,点击 Blue Ocean 主界面的 top 行来使用这一特性,如下图。\n 可以看到在我们的 UI 中增加了一个 UnitTest 的阶段,点击右上方的 X 回到 Blue Ocean 主界面。\n 流水线增加交付阶段 回到你的文本编辑器/ IDE,打开你的 Jenkinsfile。 复制以下声明式流水线代码,并粘贴到 Jenkinsfile 中 UnitTest 阶段的下方: stage('Archive') { steps { archiveArtifacts artifacts: 'app/build/outputs/**/*.apk', fingerprint: true } } ① `stage('Archive')` 这里定义了一个名为 Archive 的 stage,之后会出现在 Jenkins UI 上。 ② `archiveArtifacts` 这一行执行了一个归档构建产物的操作,执行完这步操作后我们将在任务界面看见我们执行成功后的产物输出。 最终的代码如下:\npipeline{ agent { docker { image 'allbears/jenkins-android:1.0.1' } } stages { stage('Build'){ steps { sh './gradlew clean \u0026amp;\u0026amp; rm -rf ./app/build/' sh './gradlew assembleRelease' } } stage('UnitTest'){ steps { sh './gradlew test' } } stage('Archive') { steps { archiveArtifacts artifacts: 'app/build/outputs/**/*.apk', fingerprint: true } } } } 继续 保存对 Jenkinsfile 的修改并将其提交到你的本地 jenkins-android-sample Git 仓库。例如,在 jenkins-android-sample 目录下,运行以下命令:\ngit add .\n继续运行:\ngit commit -m \u0026ldquo;Add \u0026lsquo;Archive\u0026rsquo; stage\u0026rdquo;\n 再次回到 Jenkins,如果有必要的话重新登录,进入 Jenkins 的 Blue Ocean 界面。\n 点击上方的运行,然后快速点击右下方出现的 OPEN 链接,观察 Jenkins 运行你修改过的流水线项目。如果你不能点击 OPEN 链接,点击 Blue Ocean 主界面的 top 行来使用这一特性,如图。\n 可以看到我们的 UI 中多了一个 Archive 阶段,构建完成后点击 X 关闭回到我们 Job 主界面,我们可以发现这时多了一个产物的归档下载连接。\n总结 刚刚使用 Jenkins 构建了一个简单的 Android 应用程序,覆盖编译,测试,产物输出的全过程,当然其中还有些优化点,比如我们可以将编译环境中的 Gradle 路径挂载到宿主机,避免每次运行都需要下载依赖包。\n",
"auhtor": "Sakuragi",
"translator": "",
"original": "",
"poster": ""
},
{
"uri": "https://jenkins-zh.github.io/wechat/articles/2019/01/2019-01-23-configuring-jenkins-pipeline-with-yaml-file/",
"title": "使用 YAML 文件配置 Jenkins 流水线",
......@@ -3210,19 +3210,6 @@
"original": "",
"poster": ""
},
{
"uri": "https://jenkins-zh.github.io/tutorial/use-cases/package/",
"title": "制品管理",
"type": "tutorial",
"date": "0001-01-01 00:00:00 +0000 UTC",
"tags": [],
"description": "",
"content": "",
"auhtor": "",
"translator": "",
"original": "",
"poster": ""
},
{
"uri": "https://jenkins-zh.github.io/tutorial/notify/email/email/",
"title": "在 Jenkins 中配置邮件服务器",
......@@ -3483,6 +3470,19 @@
"original": "https://jenkins.io/blog/2019/04/03/security-advisory/",
"poster": ""
},
{
"uri": "https://jenkins-zh.github.io/tutorial/best-practice/",
"title": "最佳实践",
"type": "tutorial",
"date": "0001-01-01 00:00:00 +0000 UTC",
"tags": [],
"description": "",
"content": "Jenkins 应用最佳实践\n",
"auhtor": "",
"translator": "",
"original": "",
"poster": ""
},
{
"uri": "https://jenkins-zh.github.io/tutorial/scm/git/",
"title": "有关 Git 的教程",
......@@ -3536,13 +3536,13 @@
"poster": ""
},
{
"uri": "https://jenkins-zh.github.io/tutorial/use-cases/build/",
"title": "构建",
"uri": "https://jenkins-zh.github.io/tutorial/best-practice/android/",
"title": "构建 Android 应用最佳实践",
"type": "tutorial",
"date": "0001-01-01 00:00:00 +0000 UTC",
"tags": [],
"description": "",
"content": "",
"content": "本教程将展示 Jenkins 如何使用 Jenkins 和 Gradle 构建一个简单的 Android 应用程序。并涵盖打包,测试,交付的过程。\n",
"auhtor": "",
"translator": "",
"original": "",
......@@ -3717,19 +3717,6 @@
"original": "",
"poster": ""
},
{
"uri": "https://jenkins-zh.github.io/tutorial/use-cases/deploy/",
"title": "部署",
"type": "tutorial",
"date": "0001-01-01 00:00:00 +0000 UTC",
"tags": [],
"description": "",
"content": "",
"auhtor": "",
"translator": "",
"original": "",
"poster": ""
},
{
"uri": "https://jenkins-zh.github.io/tutorial/management/plugin/configuration-as-code/",
"title": "配置即代码",
......
......@@ -1902,6 +1902,26 @@ CI 的目标是将集成简化成一个简单、易于重复的日常开发任
持续交付(CD)实际上是 CI 的扩展,其中软件交付流程进一步自动化,以便随时轻松地部署到生成环境中。 成熟的持续交付方案也展示了一个始终可部署的代码库。使用 CD 后,软件发布将成为一个没有任何紧张感的例行事件。 开发团队可以在日常开发的任何时间进行产品级的发布,而不需要详细的发布方案或者特殊的后期测试。</description>
</item>
<item>
<title>使用 Jenkins 构建 Android 应用</title>
<link>https://jenkins-zh.github.io/tutorial/best-practice/android/android-best-practice/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://jenkins-zh.github.io/tutorial/best-practice/android/android-best-practice/</guid>
<description>本教程将展示 Jenkins 如何使用 Jenkins 和 Gradle 构建一个简单的 Android 应用程序。
如果你是一个对 CI/CD 概念不了解的 Android 开发者,或者你熟悉这些概念却不知道如何使用 Jenkins 完成构建,那么本教程很适合你。你将在 GitHub 上获取一个简单的 Android 应用项目,并包含单元测试。
耗时:本教程需要 20-40 分钟来完成(假设你的机器已经满足配置要求)。
配置要求 对于本教程,您将需要:
安装有 macOS、Linux 或 Windows 操作系统的机器,并拥有以下配置:
最小 256 MB 内存,推荐 512MB 以上。
10 GB 硬盘空间,用于安装 Jenkins,您的 Docker 镜像和容器。
安装有以下软件:
Docker - 在安装 Jenkins 页面的安装 Docker 章节阅读更多信息。
注意:如果您使用 Linux,本教程假定您没有以 root 用户的身份运行 Docker 命令,而是使用单个用户帐户访问本教程中使用的其他工具。
Git 和 GitHub Desktop。
在 Docker 中运行 Jenkins 在本教程中,将 Jenkins 作为 Docker 容器并从 jenkinsci/blueocean Docker 镜像中运行。</description>
</item>
<item>
<title>使用 YAML 文件配置 Jenkins 流水线</title>
<link>https://jenkins-zh.github.io/wechat/articles/2019/01/2019-01-23-configuring-jenkins-pipeline-with-yaml-file/</link>
......
......@@ -1263,11 +1263,11 @@
</url>
<url>
<loc>https://jenkins-zh.github.io/tutorial/use-cases/</loc>
<loc>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-what-is-cicd/</loc>
</url>
<url>
<loc>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-what-is-cicd/</loc>
<loc>https://jenkins-zh.github.io/tutorial/best-practice/android/android-best-practice/</loc>
</url>
<url>
......@@ -1287,10 +1287,6 @@
<loc>https://jenkins-zh.github.io/about/about-site/</loc>
</url>
<url>
<loc>https://jenkins-zh.github.io/tutorial/use-cases/package/</loc>
</url>
<url>
<loc>https://jenkins-zh.github.io/tutorial/notify/email/email/</loc>
</url>
......@@ -1387,6 +1383,10 @@
<loc>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-15-security-spring-cleaning/</loc>
</url>
<url>
<loc>https://jenkins-zh.github.io/tutorial/best-practice/</loc>
</url>
<url>
<loc>https://jenkins-zh.github.io/tutorial/scm/git/</loc>
</url>
......@@ -1404,7 +1404,7 @@
</url>
<url>
<loc>https://jenkins-zh.github.io/tutorial/use-cases/build/</loc>
<loc>https://jenkins-zh.github.io/tutorial/best-practice/android/</loc>
</url>
<url>
......@@ -1467,10 +1467,6 @@
<loc>https://jenkins-zh.github.io/tutorial/management/auth/keyclock/</loc>
</url>
<url>
<loc>https://jenkins-zh.github.io/tutorial/use-cases/deploy/</loc>
</url>
<url>
<loc>https://jenkins-zh.github.io/tutorial/management/plugin/configuration-as-code/</loc>
</url>
......
......@@ -208,6 +208,22 @@ var trackOutboundLink = function(id, url) {
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/best-practice">
<span>最佳实践</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/best-practice/android/">构建 Android 应用最佳实践</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/management">
......@@ -315,30 +331,6 @@ var trackOutboundLink = function(id, url) {
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/use-cases">
<span>使用场景</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/use-cases/package/">制品管理</a>
</li>
<li class="">
<a href="/tutorial/use-cases/build/">构建</a>
</li>
<li class="">
<a href="/tutorial/use-cases/deploy/">部署</a>
</li>
</ul>
</ul>
</aside>
</div>
......
......@@ -208,6 +208,22 @@ var trackOutboundLink = function(id, url) {
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/best-practice">
<span>最佳实践</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/best-practice/android/">构建 Android 应用最佳实践</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/management">
......@@ -315,30 +331,6 @@ var trackOutboundLink = function(id, url) {
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/use-cases">
<span>使用场景</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/use-cases/package/">制品管理</a>
</li>
<li class="">
<a href="/tutorial/use-cases/build/">构建</a>
</li>
<li class="">
<a href="/tutorial/use-cases/deploy/">部署</a>
</li>
</ul>
</ul>
</aside>
</div>
......
......@@ -208,6 +208,22 @@ var trackOutboundLink = function(id, url) {
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/best-practice">
<span>最佳实践</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/best-practice/android/">构建 Android 应用最佳实践</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/management">
......@@ -315,30 +331,6 @@ var trackOutboundLink = function(id, url) {
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/use-cases">
<span>使用场景</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/use-cases/package/">制品管理</a>
</li>
<li class="">
<a href="/tutorial/use-cases/build/">构建</a>
</li>
<li class="">
<a href="/tutorial/use-cases/deploy/">部署</a>
</li>
</ul>
</ul>
</aside>
</div>
......
<!DOCTYPE html>
<html class="no-js" lang="zh-CN">
<head>
<meta charset="utf-8">
<link rel="preload" href="https://jenkins-zh.github.io/files/muli-latin-200.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="https://jenkins-zh.github.io/files/muli-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="https://jenkins-zh.github.io/files/muli-latin-800.woff2" as="font" type="font/woff2" crossorigin>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>构建 Android 应用最佳实践 - Jenkins 中文社区</title>
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="description" content="共建开放、包容、活跃的 Jenkins 社区">
<meta name="keywords" content="Jenkins,Jenkins中文社区,Jenkins官方公众号,持续集成,持续交付,开源社区,DevOps">
<meta name="viewport" content="width=device-width,minimum-scale=1">
<meta name="generator" content="Hugo 0.53" />
<META NAME="ROBOTS" CONTENT="INDEX, FOLLOW">
<link rel="alternate" type="application/rss&#43;xml" href="https://jenkins-zh.github.io/tutorial/best-practice/android/index.xml">
<link href='/dist/main.css' rel='stylesheet' type="text/css" /><style>
img.avatar {
width: 32px;
display: inline;
}
</style>
<meta property="og:title" content="构建 Android 应用最佳实践" />
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://jenkins-zh.github.io/tutorial/best-practice/android/" />
<meta itemprop="name" content="构建 Android 应用最佳实践">
<meta itemprop="description" content="">
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="构建 Android 应用最佳实践"/>
<meta name="twitter:description" content=""/>
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-4216293-5"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-4216293-5');
var trackOutboundLink = function(id, url) {
console.log("track:", id, url)
gtag('event', 'click', {
'event_category': 'outbound',
'event_label': id,
'transport_type': 'beacon',
'event_callback': function(){document.location = url;}
});
}
</script>
</head>
<body class="ma0 sans-serif bg-primary-color-light">
<nav class="bg-primary-color-dark pv4 w-100" role="navigation">
<div class="center flex-ns flex-wrap items-center justify-start mw9">
<h1 class="dim f3 lh-solid ml0-ns mr0 mr4-l mv0 pl3 pl4-ns">
<a href="https://jenkins-zh.github.io" class="link white">
Jenkins 中文社区
</a>
</h1>
<ul class="list ma0 pa0 dn dib-l">
<li class="f5 dib mr4" role="menuitem">
<a href="/wechat/" class="dim link light-silver"
>
博客
</a>
</li>
<li class="f5 dib mr4" role="menuitem">
<a href="/tutorial/" class="dim link light-silver"
>
教程
</a>
</li>
<li class="f5 dib mr4" role="menuitem">
<a href="/event/" class="dim link light-silver"
>
活动
</a>
</li>
<li class="f5 dib mr4" role="menuitem">
<a href="/partner/" class="dim link light-silver"
>
合作伙伴
</a>
</li>
<li class="f5 dib mr4" role="menuitem">
<a href="/about/" class="dim link light-silver"
>
关于我们
</a>
</li>
<li class="f5 dib mr4" role="menuitem">
<a href="http://jenkins.io/zh" class="dim link light-silver"
target="_blank">
Jenkins 官网
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="10" height="10" viewBox="0 0 32 32" class="fill-current v-base" aria-label="External Link">
<path d="M25.152 16.576v5.696q0 2.144-1.504 3.648t-3.648 1.504h-14.848q-2.144 0-3.648-1.504t-1.504-3.648v-14.848q0-2.112 1.504-3.616t3.648-1.536h12.576q0.224 0 0.384 0.16t0.16 0.416v1.152q0 0.256-0.16 0.416t-0.384 0.16h-12.576q-1.184 0-2.016 0.832t-0.864 2.016v14.848q0 1.184 0.864 2.016t2.016 0.864h14.848q1.184 0 2.016-0.864t0.832-2.016v-5.696q0-0.256 0.16-0.416t0.416-0.16h1.152q0.256 0 0.416 0.16t0.16 0.416zM32 1.152v9.12q0 0.48-0.352 0.8t-0.8 0.352-0.8-0.352l-3.136-3.136-11.648 11.648q-0.16 0.192-0.416 0.192t-0.384-0.192l-2.048-2.048q-0.192-0.16-0.192-0.384t0.192-0.416l11.648-11.648-3.136-3.136q-0.352-0.352-0.352-0.8t0.352-0.8 0.8-0.352h9.12q0.48 0 0.8 0.352t0.352 0.8z"></path>
</svg>
</a>
</li>
</ul>
<div class="db dib-ns pl3"><form id="site-search-form" action="" role="search">
<fieldset class="bn ma0 pa0">
<label class="clip" for="email-address">Search</label>
<input type="search" id="search-input" class="needs-js bg-left bg-transparent bn f5 input-reset lh-solid mt3 mt0-ns pl4 pv2 w5 white"
placeholder="搜索文档" type="text"
name="email-address" value="" style="background-image:url('/images/icon-search.png');background-size:16px 16px;">
</fieldset>
</form>
</div>
<div class="list ma0 pa0 dn dib-l"></div>
<span class="absolute mt1 mt2-l pr3 right-0 top-0">
<a class="github-button needs-js link primary-color-dark" href="https://github.com/jenkins-zh/jenkins-zh/" data-size="large" data-show-count="false" aria-label="Star Jenkins WeChat GitHub">Star</a>
</span>
</div>
</nav>
<main role="main" class="content-with-sidebar min-vh-100 pb7 pb0-ns">
<div class="w-100 ph4 pb5 pb6-ns pt1 pt3-ns">
<div class="flex">
<div class="dn db-l w-20">
<aside>
<ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/api">
<span>API</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/api/plugin/">插件相关</a>
</li>
<li class="">
<a href="/tutorial/api/core/">核心</a>
</li>
</ul>
<li class="active">
<a href="https://jenkins-zh.github.io/tutorial/best-practice">
<span>最佳实践</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/best-practice/android/">构建 Android 应用最佳实践</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/management">
<span>管理</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/management/backup-restore/">备份与恢复</a>
</li>
<li class="">
<a href="/tutorial/management/plugin/">插件管理</a>
</li>
<li class="">
<a href="/tutorial/management/agent/">计算节点</a>
</li>
<li class="">
<a href="/tutorial/management/auth/">认证</a>
</li>
<li class="">
<a href="/tutorial/management/mirror/">镜像源</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/notify">
<span>消息通知</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/notify/email/">电子邮件</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/pipeline">
<span>流水线</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/pipeline/shared-library/">共享库</a>
</li>
<li class="">
<a href="/tutorial/pipeline/multi-branch/">多分支流水线</a>
</li>
<li class="">
<a href="/tutorial/pipeline/pipeline/">流水线</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/plugin-dev">
<span>插件开发</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/plugin-dev/pipeline/">流水线插件</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/scm">
<span>代码管理</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/scm/git/">有关 Git 的教程</a>
</li>
<li class="">
<a href="/tutorial/scm/svn/">有关 svn 的教程</a>
</li>
</ul>
</ul>
</aside>
</div>
<div class="prose">
<p>本教程将展示 Jenkins 如何使用 Jenkins 和 Gradle 构建一个简单的 Android 应用程序。并涵盖打包,测试,交付的过程。</p>
<div>
<a href="/tutorial/best-practice/android/android-best-practice/">使用 Jenkins 构建 Android 应用</a>
</div>
</div>
</div>
</div>
<style>
div[class=utterances] {
max-width: inherit;
width: auto;
margin-left: 32px;
margin-right: 32px;
}
</style>
<script src="https://utteranc.es/client.js"
repo="jenkins-zh/jenkins-zh.github.io"
issue-term="pathname"
theme="github-light"
label="tutorial"
crossorigin="linuxsuren"
async>
</script>
</main>
<footer class="bg-primary-color-dark ph4-ns pt4 relative w-100" role="contentinfo">
<div class="center flex-ns flex-wrap justify-between mw9 w-90">
<div class="pb3 pt4 w-100 w-50-ns">
<div class="b f3 light-gray mb3 nested-links tc">
<a href="https://github.com/jenkins-zh/jenkins-zh/graphs/contributors" target="_blank"
class="link">Jenkins 社区贡献者</a> 维护<br />
</div>
<ul class="center f6 list ma0 mv3 pa0 tc" style="display:none"><li class="dib mr3"><a href="https://github.com/jenkins-zh/jenkins-zh/issues/new" class="dim link light-gray pv2">File an Issue</a></li></ul>
<ul class="center f6 list ma0 mv4 pa0 tc">
<li class="dib mr3">
<a href="https://twitter.com/jenkinsci" target="_blank" class="dim link light-gray pv2">Twitter</a>
</li>
<li class="dib mr3">
<a href="https://www.youtube.com/channel/UC63xz3pq26BBgwB3cnwCoqQ" target="_blank"
class="dim link light-gray pv2">YouTube</a>
</li>
<li class="dib mr3">
<a href="https://space.bilibili.com/433584098" target="_blank" class="dim link light-gray pv2">哔哩哔哩</a>
</li>
<li class="dib mr3">
<a href="http://jcli.jenkins-zh.cn/" target="_blank" class="dim link light-gray pv2">Jenkins
CLI</a>
</li>
<li class="dib mr3">
<a href="https://discourse.jenkins-zh.cn/" target="_blank" class="dim link light-gray pv2">社区论坛</a>
</li>
</ul>
</div>
<div>
<div style="color: #ffffff; display: inline-block; text-align: center; margin-right: 5px; margin-left: 5px;">优酷视频
<div>
<a href="https://i.youku.com/jenkinszh" target="_blank">
<img src="/images/youku-qrcode.png" with="100" height="100">
</a>
</div>
</div>
<div style="color: #ffffff; display: inline-block; text-align: center; margin-right: 5px; margin-left: 5px;">微信公众号
<div>
<a href="https://mp.weixin.qq.com/s/vifdduC3kRGSIMpyL03yVA" target="_blank">
<img src="https://jenkins.io/images/jenkins-wechat.png" with="100" height="100">
</a>
</div>
</div>
</div>
</div>
<div class="f7 gray mb5 mb0-ns ph3 w-100" style="display:none"> 
<p class="dib mr4">Jenkins&reg; is a registered trademark of <a href="https://www.spi-inc.org/"
class="link">Software in the Public Interest, Inc.</a></p>
<p class="dib">Copyright 2018–2019 the original authors.</p>
</div>
<div class="bg-primary-color-dark bottom-0 left-0 right-0 dn-l fixed pb3 ph3 w-100"><div class="globalmenu mobilemenu pb3 dn">
<ul class="list hidden dib ph0 ma0 scrolling-touch tc">
<li class="tl dib ma0 hover-bg-black w-100">
<a href="/wechat/" class="ttu f6 link primary-color-light overflow hover-white db brand-font ma0 w-100 pv3 ph4">
博客
</a>
</li>
<li class="tl dib ma0 hover-bg-black w-100">
<a href="/tutorial/" class="ttu f6 link primary-color-light overflow hover-white db brand-font ma0 w-100 pv3 ph4">
教程
</a>
</li>
<li class="tl dib ma0 hover-bg-black w-100">
<a href="/event/" class="ttu f6 link primary-color-light overflow hover-white db brand-font ma0 w-100 pv3 ph4">
活动
</a>
</li>
<li class="tl dib ma0 hover-bg-black w-100">
<a href="/partner/" class="ttu f6 link primary-color-light overflow hover-white db brand-font ma0 w-100 pv3 ph4">
合作伙伴
</a>
</li>
<li class="tl dib ma0 hover-bg-black w-100">
<a href="/about/" class="ttu f6 link primary-color-light overflow hover-white db brand-font ma0 w-100 pv3 ph4">
关于我们
</a>
</li>
<li class="tl dib ma0 hover-bg-black w-100">
<a href="http://jenkins.io/zh" class="ttu f6 link primary-color-light overflow hover-white db brand-font ma0 w-100 pv3 ph4">
Jenkins 官网
</a>
</li>
</ul>
</div>
<div class="flex dn-l justify-between">
<button class="js-toggle flex-auto dib dn-l f6 tc db mt4-ns ph3 pv2 link mr2 white bg-primary-color-dark hover-bg-primary-color ba b--white-40 w-auto" data-target=".globalmenu">菜单</button>
</div>
<script src="/dist/app.bundle.js" type="text/javascript"></script>
</div>
<script>
((window.gitter = {}).chat = {}).options = {
room: 'jenkinsci/chinese'
};
</script>
<script src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer></script>
</footer>
<link href="/dist/auto-complete.css" rel="stylesheet">
<script type="text/javascript">
var baseurl = "https:\/\/jenkins-zh.github.io";
</script>
<script src="/dist/lunr.js"></script>
<script src="/dist/autocomplete.js"></script>
<script src="/dist/jquery-3.2.1.min.js"></script>
<script src="/dist/search.js"></script>
<script async defer src="https://buttons.github.io/buttons.js"></script>
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?6db234f713318730f0e5f6a95bdd8d47";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
<script>
(function(){
var src = (document.location.protocol == "http:") ? "http://js.passport.qihucdn.com/11.0.1.js?6276dcef5c15f276644151772390c1f9":"https://jspassport.ssl.qhimg.com/11.0.1.js?6276dcef5c15f276644151772390c1f9";
document.write('<script src="' + src + '" id="sozz"><\/script>');
})();
</script>
</body>
</html>
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>构建 Android 应用最佳实践 on Jenkins 中文社区</title>
<link>https://jenkins-zh.github.io/tutorial/best-practice/android/</link>
<description>Recent content in 构建 Android 应用最佳实践 on Jenkins 中文社区</description>
<generator>Hugo -- gohugo.io</generator>
<language>zh-CN</language>
<atom:link href="https://jenkins-zh.github.io/tutorial/best-practice/android/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>使用 Jenkins 构建 Android 应用</title>
<link>https://jenkins-zh.github.io/tutorial/best-practice/android/android-best-practice/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://jenkins-zh.github.io/tutorial/best-practice/android/android-best-practice/</guid>
<description>本教程将展示 Jenkins 如何使用 Jenkins 和 Gradle 构建一个简单的 Android 应用程序。
如果你是一个对 CI/CD 概念不了解的 Android 开发者,或者你熟悉这些概念却不知道如何使用 Jenkins 完成构建,那么本教程很适合你。你将在 GitHub 上获取一个简单的 Android 应用项目,并包含单元测试。
耗时:本教程需要 20-40 分钟来完成(假设你的机器已经满足配置要求)。
配置要求 对于本教程,您将需要:
安装有 macOS、Linux 或 Windows 操作系统的机器,并拥有以下配置:
最小 256 MB 内存,推荐 512MB 以上。
10 GB 硬盘空间,用于安装 Jenkins,您的 Docker 镜像和容器。
安装有以下软件:
Docker - 在安装 Jenkins 页面的安装 Docker 章节阅读更多信息。
注意:如果您使用 Linux,本教程假定您没有以 root 用户的身份运行 Docker 命令,而是使用单个用户帐户访问本教程中使用的其他工具。
Git 和 GitHub Desktop。
在 Docker 中运行 Jenkins 在本教程中,将 Jenkins 作为 Docker 容器并从 jenkinsci/blueocean Docker 镜像中运行。</description>
</item>
</channel>
</rss>
\ No newline at end of file
<!DOCTYPE html>
<html class="no-js" lang="zh-CN">
<head>
<meta charset="utf-8">
<link rel="preload" href="https://jenkins-zh.github.io/files/muli-latin-200.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="https://jenkins-zh.github.io/files/muli-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="https://jenkins-zh.github.io/files/muli-latin-800.woff2" as="font" type="font/woff2" crossorigin>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>最佳实践 - Jenkins 中文社区</title>
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="description" content="共建开放、包容、活跃的 Jenkins 社区">
<meta name="keywords" content="Jenkins,Jenkins中文社区,Jenkins官方公众号,持续集成,持续交付,开源社区,DevOps">
<meta name="viewport" content="width=device-width,minimum-scale=1">
<meta name="generator" content="Hugo 0.53" />
<META NAME="ROBOTS" CONTENT="INDEX, FOLLOW">
<link rel="alternate" type="application/rss&#43;xml" href="https://jenkins-zh.github.io/tutorial/best-practice/index.xml">
<link href='/dist/main.css' rel='stylesheet' type="text/css" /><style>
img.avatar {
width: 32px;
display: inline;
}
</style>
<meta property="og:title" content="最佳实践" />
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://jenkins-zh.github.io/tutorial/best-practice/" />
<meta itemprop="name" content="最佳实践">
<meta itemprop="description" content="">
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="最佳实践"/>
<meta name="twitter:description" content=""/>
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-4216293-5"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-4216293-5');
var trackOutboundLink = function(id, url) {
console.log("track:", id, url)
gtag('event', 'click', {
'event_category': 'outbound',
'event_label': id,
'transport_type': 'beacon',
'event_callback': function(){document.location = url;}
});
}
</script>
</head>
<body class="ma0 sans-serif bg-primary-color-light">
<nav class="bg-primary-color-dark pv4 w-100" role="navigation">
<div class="center flex-ns flex-wrap items-center justify-start mw9">
<h1 class="dim f3 lh-solid ml0-ns mr0 mr4-l mv0 pl3 pl4-ns">
<a href="https://jenkins-zh.github.io" class="link white">
Jenkins 中文社区
</a>
</h1>
<ul class="list ma0 pa0 dn dib-l">
<li class="f5 dib mr4" role="menuitem">
<a href="/wechat/" class="dim link light-silver"
>
博客
</a>
</li>
<li class="f5 dib mr4" role="menuitem">
<a href="/tutorial/" class="dim link light-silver"
>
教程
</a>
</li>
<li class="f5 dib mr4" role="menuitem">
<a href="/event/" class="dim link light-silver"
>
活动
</a>
</li>
<li class="f5 dib mr4" role="menuitem">
<a href="/partner/" class="dim link light-silver"
>
合作伙伴
</a>
</li>
<li class="f5 dib mr4" role="menuitem">
<a href="/about/" class="dim link light-silver"
>
关于我们
</a>
</li>
<li class="f5 dib mr4" role="menuitem">
<a href="http://jenkins.io/zh" class="dim link light-silver"
target="_blank">
Jenkins 官网
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="10" height="10" viewBox="0 0 32 32" class="fill-current v-base" aria-label="External Link">
<path d="M25.152 16.576v5.696q0 2.144-1.504 3.648t-3.648 1.504h-14.848q-2.144 0-3.648-1.504t-1.504-3.648v-14.848q0-2.112 1.504-3.616t3.648-1.536h12.576q0.224 0 0.384 0.16t0.16 0.416v1.152q0 0.256-0.16 0.416t-0.384 0.16h-12.576q-1.184 0-2.016 0.832t-0.864 2.016v14.848q0 1.184 0.864 2.016t2.016 0.864h14.848q1.184 0 2.016-0.864t0.832-2.016v-5.696q0-0.256 0.16-0.416t0.416-0.16h1.152q0.256 0 0.416 0.16t0.16 0.416zM32 1.152v9.12q0 0.48-0.352 0.8t-0.8 0.352-0.8-0.352l-3.136-3.136-11.648 11.648q-0.16 0.192-0.416 0.192t-0.384-0.192l-2.048-2.048q-0.192-0.16-0.192-0.384t0.192-0.416l11.648-11.648-3.136-3.136q-0.352-0.352-0.352-0.8t0.352-0.8 0.8-0.352h9.12q0.48 0 0.8 0.352t0.352 0.8z"></path>
</svg>
</a>
</li>
</ul>
<div class="db dib-ns pl3"><form id="site-search-form" action="" role="search">
<fieldset class="bn ma0 pa0">
<label class="clip" for="email-address">Search</label>
<input type="search" id="search-input" class="needs-js bg-left bg-transparent bn f5 input-reset lh-solid mt3 mt0-ns pl4 pv2 w5 white"
placeholder="搜索文档" type="text"
name="email-address" value="" style="background-image:url('/images/icon-search.png');background-size:16px 16px;">
</fieldset>
</form>
</div>
<div class="list ma0 pa0 dn dib-l"></div>
<span class="absolute mt1 mt2-l pr3 right-0 top-0">
<a class="github-button needs-js link primary-color-dark" href="https://github.com/jenkins-zh/jenkins-zh/" data-size="large" data-show-count="false" aria-label="Star Jenkins WeChat GitHub">Star</a>
</span>
</div>
</nav>
<main role="main" class="content-with-sidebar min-vh-100 pb7 pb0-ns">
<div class="w-100 ph4 pb5 pb6-ns pt1 pt3-ns">
<div class="flex">
<div class="dn db-l w-20">
<aside>
<ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/api">
<span>API</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/api/plugin/">插件相关</a>
</li>
<li class="">
<a href="/tutorial/api/core/">核心</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/best-practice">
<span>最佳实践</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/best-practice/android/">构建 Android 应用最佳实践</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/management">
<span>管理</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/management/backup-restore/">备份与恢复</a>
</li>
<li class="">
<a href="/tutorial/management/plugin/">插件管理</a>
</li>
<li class="">
<a href="/tutorial/management/agent/">计算节点</a>
</li>
<li class="">
<a href="/tutorial/management/auth/">认证</a>
</li>
<li class="">
<a href="/tutorial/management/mirror/">镜像源</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/notify">
<span>消息通知</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/notify/email/">电子邮件</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/pipeline">
<span>流水线</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/pipeline/shared-library/">共享库</a>
</li>
<li class="">
<a href="/tutorial/pipeline/multi-branch/">多分支流水线</a>
</li>
<li class="">
<a href="/tutorial/pipeline/pipeline/">流水线</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/plugin-dev">
<span>插件开发</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/plugin-dev/pipeline/">流水线插件</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/scm">
<span>代码管理</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/scm/git/">有关 Git 的教程</a>
</li>
<li class="">
<a href="/tutorial/scm/svn/">有关 svn 的教程</a>
</li>
</ul>
</ul>
</aside>
</div>
<div class="prose">
<p>Jenkins 应用最佳实践</p>
</div>
</div>
</div>
<style>
div[class=utterances] {
max-width: inherit;
width: auto;
margin-left: 32px;
margin-right: 32px;
}
</style>
<script src="https://utteranc.es/client.js"
repo="jenkins-zh/jenkins-zh.github.io"
issue-term="pathname"
theme="github-light"
label="tutorial"
crossorigin="linuxsuren"
async>
</script>
</main>
<footer class="bg-primary-color-dark ph4-ns pt4 relative w-100" role="contentinfo">
<div class="center flex-ns flex-wrap justify-between mw9 w-90">
<div class="pb3 pt4 w-100 w-50-ns">
<div class="b f3 light-gray mb3 nested-links tc">
<a href="https://github.com/jenkins-zh/jenkins-zh/graphs/contributors" target="_blank"
class="link">Jenkins 社区贡献者</a> 维护<br />
</div>
<ul class="center f6 list ma0 mv3 pa0 tc" style="display:none"><li class="dib mr3"><a href="https://github.com/jenkins-zh/jenkins-zh/issues/new" class="dim link light-gray pv2">File an Issue</a></li></ul>
<ul class="center f6 list ma0 mv4 pa0 tc">
<li class="dib mr3">
<a href="https://twitter.com/jenkinsci" target="_blank" class="dim link light-gray pv2">Twitter</a>
</li>
<li class="dib mr3">
<a href="https://www.youtube.com/channel/UC63xz3pq26BBgwB3cnwCoqQ" target="_blank"
class="dim link light-gray pv2">YouTube</a>
</li>
<li class="dib mr3">
<a href="https://space.bilibili.com/433584098" target="_blank" class="dim link light-gray pv2">哔哩哔哩</a>
</li>
<li class="dib mr3">
<a href="http://jcli.jenkins-zh.cn/" target="_blank" class="dim link light-gray pv2">Jenkins
CLI</a>
</li>
<li class="dib mr3">
<a href="https://discourse.jenkins-zh.cn/" target="_blank" class="dim link light-gray pv2">社区论坛</a>
</li>
</ul>
</div>
<div>
<div style="color: #ffffff; display: inline-block; text-align: center; margin-right: 5px; margin-left: 5px;">优酷视频
<div>
<a href="https://i.youku.com/jenkinszh" target="_blank">
<img src="/images/youku-qrcode.png" with="100" height="100">
</a>
</div>
</div>
<div style="color: #ffffff; display: inline-block; text-align: center; margin-right: 5px; margin-left: 5px;">微信公众号
<div>
<a href="https://mp.weixin.qq.com/s/vifdduC3kRGSIMpyL03yVA" target="_blank">
<img src="https://jenkins.io/images/jenkins-wechat.png" with="100" height="100">
</a>
</div>
</div>
</div>
</div>
<div class="f7 gray mb5 mb0-ns ph3 w-100" style="display:none"> 
<p class="dib mr4">Jenkins&reg; is a registered trademark of <a href="https://www.spi-inc.org/"
class="link">Software in the Public Interest, Inc.</a></p>
<p class="dib">Copyright 2018–2019 the original authors.</p>
</div>
<div class="bg-primary-color-dark bottom-0 left-0 right-0 dn-l fixed pb3 ph3 w-100"><div class="globalmenu mobilemenu pb3 dn">
<ul class="list hidden dib ph0 ma0 scrolling-touch tc">
<li class="tl dib ma0 hover-bg-black w-100">
<a href="/wechat/" class="ttu f6 link primary-color-light overflow hover-white db brand-font ma0 w-100 pv3 ph4">
博客
</a>
</li>
<li class="tl dib ma0 hover-bg-black w-100">
<a href="/tutorial/" class="ttu f6 link primary-color-light overflow hover-white db brand-font ma0 w-100 pv3 ph4">
教程
</a>
</li>
<li class="tl dib ma0 hover-bg-black w-100">
<a href="/event/" class="ttu f6 link primary-color-light overflow hover-white db brand-font ma0 w-100 pv3 ph4">
活动
</a>
</li>
<li class="tl dib ma0 hover-bg-black w-100">
<a href="/partner/" class="ttu f6 link primary-color-light overflow hover-white db brand-font ma0 w-100 pv3 ph4">
合作伙伴
</a>
</li>
<li class="tl dib ma0 hover-bg-black w-100">
<a href="/about/" class="ttu f6 link primary-color-light overflow hover-white db brand-font ma0 w-100 pv3 ph4">
关于我们
</a>
</li>
<li class="tl dib ma0 hover-bg-black w-100">
<a href="http://jenkins.io/zh" class="ttu f6 link primary-color-light overflow hover-white db brand-font ma0 w-100 pv3 ph4">
Jenkins 官网
</a>
</li>
</ul>
</div>
<div class="flex dn-l justify-between">
<button class="js-toggle flex-auto dib dn-l f6 tc db mt4-ns ph3 pv2 link mr2 white bg-primary-color-dark hover-bg-primary-color ba b--white-40 w-auto" data-target=".globalmenu">菜单</button>
</div>
<script src="/dist/app.bundle.js" type="text/javascript"></script>
</div>
<script>
((window.gitter = {}).chat = {}).options = {
room: 'jenkinsci/chinese'
};
</script>
<script src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer></script>
</footer>
<link href="/dist/auto-complete.css" rel="stylesheet">
<script type="text/javascript">
var baseurl = "https:\/\/jenkins-zh.github.io";
</script>
<script src="/dist/lunr.js"></script>
<script src="/dist/autocomplete.js"></script>
<script src="/dist/jquery-3.2.1.min.js"></script>
<script src="/dist/search.js"></script>
<script async defer src="https://buttons.github.io/buttons.js"></script>
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?6db234f713318730f0e5f6a95bdd8d47";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
<script>
(function(){
var src = (document.location.protocol == "http:") ? "http://js.passport.qihucdn.com/11.0.1.js?6276dcef5c15f276644151772390c1f9":"https://jspassport.ssl.qhimg.com/11.0.1.js?6276dcef5c15f276644151772390c1f9";
document.write('<script src="' + src + '" id="sozz"><\/script>');
})();
</script>
</body>
</html>
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>最佳实践 on Jenkins 中文社区</title>
<link>https://jenkins-zh.github.io/tutorial/best-practice/</link>
<description>Recent content in 最佳实践 on Jenkins 中文社区</description>
<generator>Hugo -- gohugo.io</generator>
<language>zh-CN</language>
<atom:link href="https://jenkins-zh.github.io/tutorial/best-practice/index.xml" rel="self" type="application/rss+xml" />
</channel>
</rss>
\ No newline at end of file
......@@ -208,6 +208,22 @@ var trackOutboundLink = function(id, url) {
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/best-practice">
<span>最佳实践</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/best-practice/android/">构建 Android 应用最佳实践</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/management">
......@@ -315,30 +331,6 @@ var trackOutboundLink = function(id, url) {
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/use-cases">
<span>使用场景</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/use-cases/package/">制品管理</a>
</li>
<li class="">
<a href="/tutorial/use-cases/build/">构建</a>
</li>
<li class="">
<a href="/tutorial/use-cases/deploy/">部署</a>
</li>
</ul>
</ul>
</aside>
</div>
......
......@@ -208,6 +208,22 @@ var trackOutboundLink = function(id, url) {
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/best-practice">
<span>最佳实践</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/best-practice/android/">构建 Android 应用最佳实践</a>
</li>
</ul>
<li class="active">
<a href="https://jenkins-zh.github.io/tutorial/management">
......@@ -315,30 +331,6 @@ var trackOutboundLink = function(id, url) {
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/use-cases">
<span>使用场景</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/use-cases/package/">制品管理</a>
</li>
<li class="">
<a href="/tutorial/use-cases/build/">构建</a>
</li>
<li class="">
<a href="/tutorial/use-cases/deploy/">部署</a>
</li>
</ul>
</ul>
</aside>
</div>
......
......@@ -208,6 +208,22 @@ var trackOutboundLink = function(id, url) {
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/best-practice">
<span>最佳实践</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/best-practice/android/">构建 Android 应用最佳实践</a>
</li>
</ul>
<li class="active">
<a href="https://jenkins-zh.github.io/tutorial/management">
......@@ -315,30 +331,6 @@ var trackOutboundLink = function(id, url) {
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/use-cases">
<span>使用场景</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/use-cases/package/">制品管理</a>
</li>
<li class="">
<a href="/tutorial/use-cases/build/">构建</a>
</li>
<li class="">
<a href="/tutorial/use-cases/deploy/">部署</a>
</li>
</ul>
</ul>
</aside>
</div>
......
......@@ -208,6 +208,22 @@ var trackOutboundLink = function(id, url) {
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/best-practice">
<span>最佳实践</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/best-practice/android/">构建 Android 应用最佳实践</a>
</li>
</ul>
<li class="active">
<a href="https://jenkins-zh.github.io/tutorial/management">
......@@ -315,30 +331,6 @@ var trackOutboundLink = function(id, url) {
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/use-cases">
<span>使用场景</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/use-cases/package/">制品管理</a>
</li>
<li class="">
<a href="/tutorial/use-cases/build/">构建</a>
</li>
<li class="">
<a href="/tutorial/use-cases/deploy/">部署</a>
</li>
</ul>
</ul>
</aside>
</div>
......
......@@ -208,6 +208,22 @@ var trackOutboundLink = function(id, url) {
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/best-practice">
<span>最佳实践</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/best-practice/android/">构建 Android 应用最佳实践</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/management">
......@@ -315,30 +331,6 @@ var trackOutboundLink = function(id, url) {
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/use-cases">
<span>使用场景</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/use-cases/package/">制品管理</a>
</li>
<li class="">
<a href="/tutorial/use-cases/build/">构建</a>
</li>
<li class="">
<a href="/tutorial/use-cases/deploy/">部署</a>
</li>
</ul>
</ul>
</aside>
</div>
......
......@@ -208,6 +208,22 @@ var trackOutboundLink = function(id, url) {
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/best-practice">
<span>最佳实践</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/best-practice/android/">构建 Android 应用最佳实践</a>
</li>
</ul>
<li class="active">
<a href="https://jenkins-zh.github.io/tutorial/management">
......@@ -315,30 +331,6 @@ var trackOutboundLink = function(id, url) {
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/use-cases">
<span>使用场景</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/use-cases/package/">制品管理</a>
</li>
<li class="">
<a href="/tutorial/use-cases/build/">构建</a>
</li>
<li class="">
<a href="/tutorial/use-cases/deploy/">部署</a>
</li>
</ul>
</ul>
</aside>
</div>
......
......@@ -208,6 +208,22 @@ var trackOutboundLink = function(id, url) {
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/best-practice">
<span>最佳实践</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/best-practice/android/">构建 Android 应用最佳实践</a>
</li>
</ul>
<li class="active">
<a href="https://jenkins-zh.github.io/tutorial/management">
......@@ -315,30 +331,6 @@ var trackOutboundLink = function(id, url) {
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/use-cases">
<span>使用场景</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/use-cases/package/">制品管理</a>
</li>
<li class="">
<a href="/tutorial/use-cases/build/">构建</a>
</li>
<li class="">
<a href="/tutorial/use-cases/deploy/">部署</a>
</li>
</ul>
</ul>
</aside>
</div>
......
......@@ -208,6 +208,22 @@ var trackOutboundLink = function(id, url) {
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/best-practice">
<span>最佳实践</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/best-practice/android/">构建 Android 应用最佳实践</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/management">
......@@ -315,30 +331,6 @@ var trackOutboundLink = function(id, url) {
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/use-cases">
<span>使用场景</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/use-cases/package/">制品管理</a>
</li>
<li class="">
<a href="/tutorial/use-cases/build/">构建</a>
</li>
<li class="">
<a href="/tutorial/use-cases/deploy/">部署</a>
</li>
</ul>
</ul>
</aside>
</div>
......
......@@ -208,6 +208,22 @@ var trackOutboundLink = function(id, url) {
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/best-practice">
<span>最佳实践</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/best-practice/android/">构建 Android 应用最佳实践</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/management">
......@@ -315,30 +331,6 @@ var trackOutboundLink = function(id, url) {
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/use-cases">
<span>使用场景</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/use-cases/package/">制品管理</a>
</li>
<li class="">
<a href="/tutorial/use-cases/build/">构建</a>
</li>
<li class="">
<a href="/tutorial/use-cases/deploy/">部署</a>
</li>
</ul>
</ul>
</aside>
</div>
......
......@@ -208,6 +208,22 @@ var trackOutboundLink = function(id, url) {
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/best-practice">
<span>最佳实践</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/best-practice/android/">构建 Android 应用最佳实践</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/management">
......@@ -315,30 +331,6 @@ var trackOutboundLink = function(id, url) {
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/use-cases">
<span>使用场景</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/use-cases/package/">制品管理</a>
</li>
<li class="">
<a href="/tutorial/use-cases/build/">构建</a>
</li>
<li class="">
<a href="/tutorial/use-cases/deploy/">部署</a>
</li>
</ul>
</ul>
</aside>
</div>
......
......@@ -208,6 +208,22 @@ var trackOutboundLink = function(id, url) {
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/best-practice">
<span>最佳实践</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/best-practice/android/">构建 Android 应用最佳实践</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/management">
......@@ -315,30 +331,6 @@ var trackOutboundLink = function(id, url) {
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/use-cases">
<span>使用场景</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/use-cases/package/">制品管理</a>
</li>
<li class="">
<a href="/tutorial/use-cases/build/">构建</a>
</li>
<li class="">
<a href="/tutorial/use-cases/deploy/">部署</a>
</li>
</ul>
</ul>
</aside>
</div>
......
......@@ -208,6 +208,22 @@ var trackOutboundLink = function(id, url) {
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/best-practice">
<span>最佳实践</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/best-practice/android/">构建 Android 应用最佳实践</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/management">
......@@ -315,30 +331,6 @@ var trackOutboundLink = function(id, url) {
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/use-cases">
<span>使用场景</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/use-cases/package/">制品管理</a>
</li>
<li class="">
<a href="/tutorial/use-cases/build/">构建</a>
</li>
<li class="">
<a href="/tutorial/use-cases/deploy/">部署</a>
</li>
</ul>
</ul>
</aside>
</div>
......
......@@ -208,6 +208,22 @@ var trackOutboundLink = function(id, url) {
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/best-practice">
<span>最佳实践</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/best-practice/android/">构建 Android 应用最佳实践</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/management">
......@@ -315,30 +331,6 @@ var trackOutboundLink = function(id, url) {
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/use-cases">
<span>使用场景</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/use-cases/package/">制品管理</a>
</li>
<li class="">
<a href="/tutorial/use-cases/build/">构建</a>
</li>
<li class="">
<a href="/tutorial/use-cases/deploy/">部署</a>
</li>
</ul>
</ul>
</aside>
</div>
......
......@@ -208,6 +208,22 @@ var trackOutboundLink = function(id, url) {
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/best-practice">
<span>最佳实践</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/best-practice/android/">构建 Android 应用最佳实践</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/management">
......@@ -315,30 +331,6 @@ var trackOutboundLink = function(id, url) {
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/use-cases">
<span>使用场景</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/use-cases/package/">制品管理</a>
</li>
<li class="">
<a href="/tutorial/use-cases/build/">构建</a>
</li>
<li class="">
<a href="/tutorial/use-cases/deploy/">部署</a>
</li>
</ul>
</ul>
</aside>
</div>
......
......@@ -208,6 +208,22 @@ var trackOutboundLink = function(id, url) {
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/best-practice">
<span>最佳实践</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/best-practice/android/">构建 Android 应用最佳实践</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/management">
......@@ -315,30 +331,6 @@ var trackOutboundLink = function(id, url) {
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/use-cases">
<span>使用场景</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/use-cases/package/">制品管理</a>
</li>
<li class="">
<a href="/tutorial/use-cases/build/">构建</a>
</li>
<li class="">
<a href="/tutorial/use-cases/deploy/">部署</a>
</li>
</ul>
</ul>
</aside>
</div>
......
......@@ -208,6 +208,22 @@ var trackOutboundLink = function(id, url) {
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/best-practice">
<span>最佳实践</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/best-practice/android/">构建 Android 应用最佳实践</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/management">
......@@ -315,30 +331,6 @@ var trackOutboundLink = function(id, url) {
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/use-cases">
<span>使用场景</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/use-cases/package/">制品管理</a>
</li>
<li class="">
<a href="/tutorial/use-cases/build/">构建</a>
</li>
<li class="">
<a href="/tutorial/use-cases/deploy/">部署</a>
</li>
</ul>
</ul>
</aside>
</div>
......
......@@ -208,6 +208,22 @@ var trackOutboundLink = function(id, url) {
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/best-practice">
<span>最佳实践</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/best-practice/android/">构建 Android 应用最佳实践</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/management">
......@@ -315,30 +331,6 @@ var trackOutboundLink = function(id, url) {
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/use-cases">
<span>使用场景</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/use-cases/package/">制品管理</a>
</li>
<li class="">
<a href="/tutorial/use-cases/build/">构建</a>
</li>
<li class="">
<a href="/tutorial/use-cases/deploy/">部署</a>
</li>
</ul>
</ul>
</aside>
</div>
......
......@@ -208,6 +208,22 @@ var trackOutboundLink = function(id, url) {
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/best-practice">
<span>最佳实践</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/best-practice/android/">构建 Android 应用最佳实践</a>
</li>
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/management">
......@@ -315,30 +331,6 @@ var trackOutboundLink = function(id, url) {
</ul>
<li class="">
<a href="https://jenkins-zh.github.io/tutorial/use-cases">
<span>使用场景</span>
</a>
</li>
<ul class="sub-menu">
<li class="">
<a href="/tutorial/use-cases/package/">制品管理</a>
</li>
<li class="">
<a href="/tutorial/use-cases/build/">构建</a>
</li>
<li class="">
<a href="/tutorial/use-cases/deploy/">部署</a>
</li>
</ul>
</ul>
</aside>
</div>
......
......@@ -381,10 +381,10 @@ var trackOutboundLink = function(id, url) {
<li><a href="/wechat/articles/2019/08/2019-08-05-jenkins-multi-branch-pipeline/">在大型企业里维护多分支流水线</a></li>
<li><a href="/wechat/articles/2019/07/2019-07-04-performance-testing-jenkins/">Jenkins 插件的微基准测试框架</a></li>
<li><a href="/wechat/articles/2019/07/2019-07-10-phase-1-multibranch-pipeline-support-for-gitlab/">多分支流水线任务对 GitLab SCM 的支持</a></li>
<li><a href="/wechat/articles/2019/07/2019-07-04-performance-testing-jenkins/">Jenkins 插件的微基准测试框架</a></li>
<li><a href="/wechat/articles/2019/05/2019-05-27-docs-sig-announcement/">Jenkins 文档特别兴趣小组</a></li>
</ul>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册