提交 3afa074b 编写于 作者: L LinuxSuRen

Automated deployment to GitHub Pages on 1599448070

上级 56a5bb65
......@@ -1846,32 +1846,32 @@ 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/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>
<a href="/event/online-2020-04-22/" class="tile lazyload cover dib f4 ml1 mr4 bg-black relative mw-100 shadow-5">
<img width="400px" height="200px" src="/images/meetup/hackthon.png"></img>
<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>
<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>
<a href="/event/online-2020-04-22/" class="tile lazyload cover dib f4 ml1 mr4 bg-black relative mw-100 shadow-5">
<img width="400px" height="200px" src="/images/meetup/hackthon.png"></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 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>
......
......@@ -25,6 +25,19 @@
"original": "",
"poster": ""
},
{
"uri": "https://jenkins-zh.cn/wechat/articles/2020/09/2020-09-07-jenkins-json-build/",
"title": "对Jenkinsfile语法说不,开源项目Jenkins Json Build挺你",
"type": "wechat",
"date": "2020-09-07 00:00:00 +0000 UTC",
"tags": [],
"description": "使用JSON配置文件驱动Jenkins构建",
"content": " 项目背景 我所在的组织项目数量众多,使用的语言和框架也很多,比如Java、ReactNative、C# .NET、Android、iOS等,部署环境也是多种多样比如Tomcat、K8S、IIS、客户端应用是局域网内企业证书安装等,我们没有专门的配置管理员或构建部署专员,都是开发人员自己在Jenkins中写构建脚本,每个项目都有自己的构建脚本(Scripted Pipelines),但类型相同的项目比如都是Java或都是.NET项目之间,构建脚本其实都很类似,都是靠几个已存在的构建脚本改写出来的,其实开发人员对编写Jenkins构建脚本了解也不多,另外因为没有规则和约束,更没有代码复用的机制,构建部署工作很混乱和难以管理。\n项目解决的问题 在上述情况下我们开发了Jenkins-Json-Build项目,该项目适合于有一些编程经验的人员在不需要了解Jenkins构建脚本如何编写的情况下,通过简单的配置Json文件,就可以轻松完成一个项目的获取源码、单元测试、代码检查、编译构建、部署等步骤,实现一个典型的CI过程,又因为此项目使用了Jenkins共享类库(Shared Libraries)机制,构建脚本复用率得到了大幅度提高,并且开发人员可以方便的扩展更多的功能,满足不同构建部署场景的需要,此项目非常适合那些开发人员自己管理构建部署的团队,通过Jenkins-Json-Build项目组织对构建部署过程进行了统一的管理和监督,又让每个项目有足够的灵活性和自主权满足各自项目构建部署的特殊性。\n一个Java项目构建示例 构建服务器上需要安装的软件 构建服务器上需要安装Java、Maven和Sonar-Scanner(此项可选)。\n JAVA安装 Maven安装 Sonar-Scanner 构建需要依赖的Jenkins插件 JUnit JaCoCo Jenkinsfile文件内容 因为采用pipeline script from SCM构建方式,所以用Declarative Pipeline方式在Jenkinsfile中编写构建脚本:\n@Library('shared-library') _ pipeline { agent any parameters { //定义构建参数 choice choices: ['-'], description: '请选择部署方式', name: 'deploy-choice' } stages { stage('初始化') { steps { script{ //加载源码仓库根目录下的jenkins-project.json构建配置文件 runWrapper.loadJSON('/jenkins-project.json') runWrapper.runSteps('初始化') } } } stage('单元测试') { steps { script{ //执行单元测试步骤 runWrapper.runSteps('单元测试') } } } stage('代码检查') { steps { script{ //执行代码检查步骤,比如SonarQube runWrapper.runSteps('代码检查') } } } stage('编译构建') { steps { script{ //执行编译步骤 runWrapper.runSteps('编译构建') } } } stage('部署') { steps { script{ //根据选择的部署方式执行部署步骤 runWrapper.runStepForEnv('部署','deploy-choice') } } } } } 上述Jenkinsfile文件可用于所有类型的项目构建,实际使用的时候一般还会用到以下三个Jenkins插件:\n Agent Server Parameter Plugin 用于选择构建的Agent服务器 Custom Checkbox Parameter Plugin 用于选择子项目进行构建,多用于微服务项目 Git Parameter 用于选择分支构建 JSON配置文件内容 { \u0026quot;初始化\u0026quot;: { \u0026quot;检查Java环境\u0026quot;: { \u0026quot;Type\u0026quot;: \u0026quot;COMMAND_STDOUT\u0026quot;, \u0026quot;Success-IndexOf\u0026quot;: \u0026quot;java version \\\u0026quot;1.8.0_211\\\u0026quot;\u0026quot;, \u0026quot;Script\u0026quot;: { \u0026quot;输出Java版本\u0026quot;: \u0026quot;java -version 2\u0026gt;\u0026amp;1\u0026quot; } }, \u0026quot;检查Maven环境\u0026quot;: { \u0026quot;Type\u0026quot;: \u0026quot;COMMAND_STDOUT\u0026quot;, \u0026quot;Success-IndexOf\u0026quot;: \u0026quot;Apache Maven 3.6.3\u0026quot;, \u0026quot;Script\u0026quot;: { \u0026quot;输出Maven版本\u0026quot;: \u0026quot;mvn -v\u0026quot; } }, \u0026quot;检查SonarScanner环境\u0026quot;: { \u0026quot;Type\u0026quot;: \u0026quot;COMMAND_STDOUT\u0026quot;, \u0026quot;Success-IndexOf\u0026quot;: \u0026quot;SonarScanner 4.4.0.2170\u0026quot;, \u0026quot;Script\u0026quot;: { \u0026quot;输出SonarScanner版本\u0026quot;: \u0026quot;sonar-scanner -v\u0026quot; } }, \u0026quot;绑定构建参数\u0026quot;: { \u0026quot;Type\u0026quot;: \u0026quot;BUILD_PARAMETER_DROP_DOWN_MENU\u0026quot;, \u0026quot;StepsName\u0026quot;: \u0026quot;部署\u0026quot;, \u0026quot;ParamName\u0026quot;: \u0026quot;deploy-choice\u0026quot; } }, \u0026quot;单元测试\u0026quot;: { \u0026quot;执行Maven单元测试脚本\u0026quot;: { \u0026quot;Type\u0026quot;: \u0026quot;COMMAND_STATUS\u0026quot;, \u0026quot;Script\u0026quot;: { \u0026quot;Maven单元测试\u0026quot;: \u0026quot;cd ${PROJECT_PATH};mvn clean test\u0026quot; } }, \u0026quot;执行JUnit插件\u0026quot;: { \u0026quot;Type\u0026quot;: \u0026quot;JUNIT_PLUG_IN\u0026quot;, \u0026quot;JunitReportPath\u0026quot;: \u0026quot;**/${PROJECT_DIR}/**/target/**/TEST-*.xml\u0026quot; }, \u0026quot;执行Jacoco插件\u0026quot;: { \u0026quot;Type\u0026quot;: \u0026quot;JACOCO_PLUG_IN\u0026quot;, \u0026quot;classPattern\u0026quot;:\u0026quot;${PROJECT_PATH}/target/classes\u0026quot;, \u0026quot;InclusionPattern\u0026quot;:\u0026quot;${PROJECT_PATH}/**\u0026quot;, \u0026quot;LineCoverage\u0026quot;:\u0026quot;95\u0026quot;, \u0026quot;InstructionCoverage\u0026quot;:\u0026quot;0\u0026quot;, \u0026quot;MethodCoverage\u0026quot;:\u0026quot;100\u0026quot;, \u0026quot;BranchCoverage\u0026quot;:\u0026quot;95\u0026quot;, \u0026quot;ClassCoverage\u0026quot;:\u0026quot;100\u0026quot;, \u0026quot;ComplexityCoverage\u0026quot;:\u0026quot;0\u0026quot; } }, \u0026quot;代码检查\u0026quot;: { \u0026quot;执行SQ代码扫描\u0026quot;: { \u0026quot;Type\u0026quot;: \u0026quot;SONAR_QUBE\u0026quot; } }, \u0026quot;编译构建\u0026quot;: { \u0026quot;执行Maven构建\u0026quot;: { \u0026quot;Type\u0026quot;: \u0026quot;COMMAND_STATUS\u0026quot;, \u0026quot;Script\u0026quot;: { \u0026quot;Maven构建\u0026quot;: \u0026quot;cd ${PROJECT_PATH};mvn clean package -U -DskipTests\u0026quot; } } }, \u0026quot;部署\u0026quot;: { \u0026quot;模拟部署脚本-1\u0026quot;: { \u0026quot;Type\u0026quot;: \u0026quot;COMMAND_STATUS\u0026quot;, \u0026quot;Script\u0026quot;: { \u0026quot;拷贝文件\u0026quot;: \u0026quot;echo 模拟拷贝文件\u0026quot; } }, \u0026quot;模拟部署脚本-2\u0026quot;: { \u0026quot;Type\u0026quot;: \u0026quot;COMMAND_STATUS\u0026quot;, \u0026quot;Script\u0026quot;: { \u0026quot;HTTP传输文件\u0026quot;: \u0026quot;echo HTTP传输文件\u0026quot; } } } } 配置说明:\n\u0026quot;检查Java环境\u0026quot;: { \u0026quot;Type\u0026quot;: \u0026quot;COMMAND_STDOUT\u0026quot;, \u0026quot;Success-IndexOf\u0026quot;: \u0026quot;java version \\\u0026quot;1.8.0_211\\\u0026quot;\u0026quot;, \u0026quot;Script\u0026quot;: { \u0026quot;输出Java版本\u0026quot;: \u0026quot;java -version 2\u0026gt;\u0026amp;1\u0026quot; } 该类型的节点不是必须的(但看几年前写的配置文件时很有用,对需要的构建环境一目了然),目的是检查构建服务器是否具备需要的构建环境,在命令的标准输出内未含有Success-IndexOf节点定义的字符串则执行失败,对应的另一个节点名称是Fail-IndexOf,标准输出如果含有Fail-IndexOf定义的字符串则执行失败,两者选择其一使用。\n\u0026quot;绑定构建参数\u0026quot;: { \u0026quot;Type\u0026quot;: \u0026quot;BUILD_PARAMETER_DROP_DOWN_MENU\u0026quot;, \u0026quot;StepsName\u0026quot;: \u0026quot;部署\u0026quot;, \u0026quot;ParamName\u0026quot;: \u0026quot;deploy-choice\u0026quot; } 将部署节点(Steps)内的具体构建步骤(Step)列表,绑定到名为deploy-choice的下拉菜单构建参数上。\n\u0026quot;执行JUnit插件\u0026quot;: { \u0026quot;Type\u0026quot;: \u0026quot;JUNIT_PLUG_IN\u0026quot;, \u0026quot;JunitReportPath\u0026quot;: \u0026quot;**/${PROJECT_DIR}/**/target/**/TEST-*.xml\u0026quot; } 使用Jenkins的JUnit插件生成Junit和TestNG的测试报告。\n\u0026quot;执行Jacoco插件\u0026quot;: { \u0026quot;Type\u0026quot;: \u0026quot;JACOCO_PLUG_IN\u0026quot;, \u0026quot;classPattern\u0026quot;:\u0026quot;${PROJECT_PATH}/target/classes\u0026quot;, \u0026quot;InclusionPattern\u0026quot;:\u0026quot;${PROJECT_PATH}/**\u0026quot;, \u0026quot;LineCoverage\u0026quot;:\u0026quot;95\u0026quot;, \u0026quot;InstructionCoverage\u0026quot;:\u0026quot;0\u0026quot;, \u0026quot;MethodCoverage\u0026quot;:\u0026quot;100\u0026quot;, \u0026quot;BranchCoverage\u0026quot;:\u0026quot;95\u0026quot;, \u0026quot;ClassCoverage\u0026quot;:\u0026quot;100\u0026quot;, \u0026quot;ComplexityCoverage\u0026quot;:\u0026quot;0\u0026quot; } 使用Jenkins的Jacoco插件检查单元测试覆盖度。\n\u0026quot;代码检查\u0026quot;: { \u0026quot;执行SQ代码扫描\u0026quot;: { \u0026quot;Type\u0026quot;: \u0026quot;SONAR_QUBE\u0026quot; } } 执行SonarQube代码检查,需要在项目根目录下要创建sonar-project.properties配置文件,以Java项目的配置文件为例:\n# must be unique in a given SonarQube instance sonar.projectKey=Jenkins:Test-Java-Build sonar.projectVersion=1.0 # Path is relative to the sonar-project.properties file. Defaults to . sonar.sources=src sonar.sourceEncoding=UTF-8 sonar.java.binaries=./target/classes \u0026quot;执行Maven构建\u0026quot;: { \u0026quot;Type\u0026quot;: \u0026quot;COMMAND_STATUS\u0026quot;, \u0026quot;Script\u0026quot;: { \u0026quot;Maven构建\u0026quot;: \u0026quot;cd ${PROJECT_PATH};mvn clean package -U -DskipTests\u0026quot; } } 该节点就是执行命令,这里具体构建命令是用mvn clean package -U -DskipTests命令完成的。\n经过上述配置文件的执行,我们可以很简单的完成所有的构建步骤:\n这里篇幅有限,更多内容请到项目仓库查看比如:\n 构建JS项目 构建ReactNative项目 构建Android项目 构建iOS项目 构建.NET项目 构建多个子项目 构建成功和失败处理 在K8S内创建Pod进行构建 欢迎大家去关注、交流更多的关于Jenkins构建的问题和经验 项目地址:Jenkins Json Build\n个人邮箱:sunweisheng@live.cn\n",
"auhtor": "sunweisheng",
"translator": "",
"original": "",
"poster": "jenkins-json-build-logo.png"
},
{
"uri": "https://jenkins-zh.cn/meeting/2020-09-02/",
"title": "",
......@@ -5073,7 +5086,7 @@
"uri": "https://jenkins-zh.cn/wechat/",
"title": "Wechats",
"type": "wechat",
"date": "2020-09-02 00:00:00 +0000 UTC",
"date": "2020-09-07 00:00:00 +0000 UTC",
"tags": [],
"description": "",
"content": "",
......@@ -36,6 +36,19 @@
GitHub 请您使用同一个 GitHub 账号来与大家交流,不欢迎使用所谓的“小号”。</description>
</item>
<item>
<title>对Jenkinsfile语法说不,开源项目Jenkins Json Build挺你</title>
<link>https://jenkins-zh.cn/wechat/articles/2020/09/2020-09-07-jenkins-json-build/</link>
<pubDate>Mon, 07 Sep 2020 00:00:00 +0000</pubDate>
<guid>https://jenkins-zh.cn/wechat/articles/2020/09/2020-09-07-jenkins-json-build/</guid>
<description>项目背景 我所在的组织项目数量众多,使用的语言和框架也很多,比如Java、ReactNative、C# .NET、Android、iOS等,部署环境也是多种多样比如Tomcat、K8S、IIS、客户端应用是局域网内企业证书安装等,我们没有专门的配置管理员或构建部署专员,都是开发人员自己在Jenkins中写构建脚本,每个项目都有自己的构建脚本(Scripted Pipelines),但类型相同的项目比如都是Java或都是.NET项目之间,构建脚本其实都很类似,都是靠几个已存在的构建脚本改写出来的,其实开发人员对编写Jenkins构建脚本了解也不多,另外因为没有规则和约束,更没有代码复用的机制,构建部署工作很混乱和难以管理。
项目解决的问题 在上述情况下我们开发了Jenkins-Json-Build项目,该项目适合于有一些编程经验的人员在不需要了解Jenkins构建脚本如何编写的情况下,通过简单的配置Json文件,就可以轻松完成一个项目的获取源码、单元测试、代码检查、编译构建、部署等步骤,实现一个典型的CI过程,又因为此项目使用了Jenkins共享类库(Shared Libraries)机制,构建脚本复用率得到了大幅度提高,并且开发人员可以方便的扩展更多的功能,满足不同构建部署场景的需要,此项目非常适合那些开发人员自己管理构建部署的团队,通过Jenkins-Json-Build项目组织对构建部署过程进行了统一的管理和监督,又让每个项目有足够的灵活性和自主权满足各自项目构建部署的特殊性。
一个Java项目构建示例 构建服务器上需要安装的软件 构建服务器上需要安装Java、Maven和Sonar-Scanner(此项可选)。
JAVA安装 Maven安装 Sonar-Scanner 构建需要依赖的Jenkins插件 JUnit JaCoCo Jenkinsfile文件内容 因为采用pipeline script from SCM构建方式,所以用Declarative Pipeline方式在Jenkinsfile中编写构建脚本:
@Library(&#39;shared-library&#39;) _ pipeline { agent any parameters { //定义构建参数 choice choices: [&#39;-&#39;], description: &#39;请选择部署方式&#39;, name: &#39;deploy-choice&#39; } stages { stage(&#39;初始化&#39;) { steps { script{ //加载源码仓库根目录下的jenkins-project.json构建配置文件 runWrapper.loadJSON(&#39;/jenkins-project.json&#39;) runWrapper.runSteps(&#39;初始化&#39;) } } } stage(&#39;单元测试&#39;) { steps { script{ //执行单元测试步骤 runWrapper.runSteps(&#39;单元测试&#39;) } } } stage(&#39;代码检查&#39;) { steps { script{ //执行代码检查步骤,比如SonarQube runWrapper.</description>
</item>
<item>
<title></title>
<link>https://jenkins-zh.cn/meeting/2020-09-02/</link>
......
......@@ -11,6 +11,11 @@
<loc>https://jenkins-zh.cn/about/code-of-conduct/</loc>
</url>
<url>
<loc>https://jenkins-zh.cn/wechat/articles/2020/09/2020-09-07-jenkins-json-build/</loc>
<lastmod>2020-09-07T00:00:00+00:00</lastmod>
</url>
<url>
<loc>https://jenkins-zh.cn/meeting/2020-09-02/</loc>
<lastmod>2020-09-02T00:00:00+00:00</lastmod>
......@@ -2055,7 +2060,7 @@
<url>
<loc>https://jenkins-zh.cn/wechat/</loc>
<lastmod>2020-09-02T00:00:00+00:00</lastmod>
<lastmod>2020-09-07T00:00:00+00:00</lastmod>
<priority>0</priority>
</url>
......
......@@ -473,10 +473,10 @@ var trackOutboundLink = function(id, url) {
<li><a href="/wechat/articles/2019/07/2019-07-29-leveraging-jenkins-on-kubernetes/">在 Kubernetes 上使用 Jenkins </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>
......
......@@ -251,6 +251,14 @@ var trackOutboundLink = function(id, url) {
</a>
<a href="https://jenkins-zh.cn/wechat/articles/2020/09/2020-09-07-jenkins-json-build/" class="dib f6 pl1 hover-bg-light-gray br-100" title="对Jenkinsfile语法说不,开源项目Jenkins Json Build挺你 ">
<svg class="fill-current" height="30px" viewBox="0 0 24 24" width="30px" xmlns="http://www.w3.org/2000/svg">
<path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/>
<path d="M0 0h24v24H0z" fill="none"/>
</svg>
</a>
<a href="https://jenkins-zh.cn/wechat/articles/2020/08/2020-08-07-github-checks-api-plugin-project-coding-phase-1/" class="dib f6 pr1 hover-bg-light-gray br-100" title="GSoC: GitHub Checks API 项目第一阶段总结">
......
......@@ -44,7 +44,7 @@
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://jenkins-zh.cn/wechat/" />
<meta property="og:updated_time" content="2020-09-02T00:00:00&#43;00:00"/>
<meta property="og:updated_time" content="2020-09-07T00:00:00&#43;00:00"/>
<meta itemprop="name" content="Wechats">
<meta itemprop="description" content="">
......@@ -217,6 +217,33 @@ var trackOutboundLink = function(id, url) {
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2020/09/2020-09-07-jenkins-json-build/" class="link primary-color dim">对Jenkinsfile语法说不,开源项目Jenkins Json Build挺你</a>
</h1>
<div class="lh-copy links">
使用JSON配置文件驱动Jenkins构建
<a href="/wechat/articles/2020/09/2020-09-07-jenkins-json-build/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2020/09/2020-09-02-devops-adoption-approach-build-and-deploy/" class="link primary-color dim">DevOps 的打开方式: 构建和部署</a>
</h1>
......@@ -454,33 +481,6 @@ var trackOutboundLink = function(id, url) {
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2020/07/2020-07-02-jcli-v0.0.29/" class="link primary-color dim">Jenkins CLI 命令行 v0.0.29</a>
</h1>
<div class="lh-copy links">
jcli-v0.0.29 发布
<a href="/wechat/articles/2020/07/2020-07-02-jcli-v0.0.29/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
</section>
</div>
......
......@@ -6,11 +6,24 @@
<description>Recent content in Wechats on Jenkins 中文社区</description>
<generator>Hugo -- gohugo.io</generator>
<language>zh-CN</language>
<lastBuildDate>Wed, 02 Sep 2020 00:00:00 +0000</lastBuildDate>
<lastBuildDate>Mon, 07 Sep 2020 00:00:00 +0000</lastBuildDate>
<atom:link href="https://jenkins-zh.cn/wechat/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>对Jenkinsfile语法说不,开源项目Jenkins Json Build挺你</title>
<link>https://jenkins-zh.cn/wechat/articles/2020/09/2020-09-07-jenkins-json-build/</link>
<pubDate>Mon, 07 Sep 2020 00:00:00 +0000</pubDate>
<guid>https://jenkins-zh.cn/wechat/articles/2020/09/2020-09-07-jenkins-json-build/</guid>
<description>项目背景 我所在的组织项目数量众多,使用的语言和框架也很多,比如Java、ReactNative、C# .NET、Android、iOS等,部署环境也是多种多样比如Tomcat、K8S、IIS、客户端应用是局域网内企业证书安装等,我们没有专门的配置管理员或构建部署专员,都是开发人员自己在Jenkins中写构建脚本,每个项目都有自己的构建脚本(Scripted Pipelines),但类型相同的项目比如都是Java或都是.NET项目之间,构建脚本其实都很类似,都是靠几个已存在的构建脚本改写出来的,其实开发人员对编写Jenkins构建脚本了解也不多,另外因为没有规则和约束,更没有代码复用的机制,构建部署工作很混乱和难以管理。
项目解决的问题 在上述情况下我们开发了Jenkins-Json-Build项目,该项目适合于有一些编程经验的人员在不需要了解Jenkins构建脚本如何编写的情况下,通过简单的配置Json文件,就可以轻松完成一个项目的获取源码、单元测试、代码检查、编译构建、部署等步骤,实现一个典型的CI过程,又因为此项目使用了Jenkins共享类库(Shared Libraries)机制,构建脚本复用率得到了大幅度提高,并且开发人员可以方便的扩展更多的功能,满足不同构建部署场景的需要,此项目非常适合那些开发人员自己管理构建部署的团队,通过Jenkins-Json-Build项目组织对构建部署过程进行了统一的管理和监督,又让每个项目有足够的灵活性和自主权满足各自项目构建部署的特殊性。
一个Java项目构建示例 构建服务器上需要安装的软件 构建服务器上需要安装Java、Maven和Sonar-Scanner(此项可选)。
JAVA安装 Maven安装 Sonar-Scanner 构建需要依赖的Jenkins插件 JUnit JaCoCo Jenkinsfile文件内容 因为采用pipeline script from SCM构建方式,所以用Declarative Pipeline方式在Jenkinsfile中编写构建脚本:
@Library(&#39;shared-library&#39;) _ pipeline { agent any parameters { //定义构建参数 choice choices: [&#39;-&#39;], description: &#39;请选择部署方式&#39;, name: &#39;deploy-choice&#39; } stages { stage(&#39;初始化&#39;) { steps { script{ //加载源码仓库根目录下的jenkins-project.json构建配置文件 runWrapper.loadJSON(&#39;/jenkins-project.json&#39;) runWrapper.runSteps(&#39;初始化&#39;) } } } stage(&#39;单元测试&#39;) { steps { script{ //执行单元测试步骤 runWrapper.runSteps(&#39;单元测试&#39;) } } } stage(&#39;代码检查&#39;) { steps { script{ //执行代码检查步骤,比如SonarQube runWrapper.</description>
</item>
<item>
<title>DevOps 的打开方式: 构建和部署</title>
<link>https://jenkins-zh.cn/wechat/articles/2020/09/2020-09-02-devops-adoption-approach-build-and-deploy/</link>
......
......@@ -44,7 +44,7 @@
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://jenkins-zh.cn/wechat/" />
<meta property="og:updated_time" content="2019-08-16T00:00:00&#43;00:00"/>
<meta property="og:updated_time" content="2019-08-17T00:00:00&#43;00:00"/>
<meta itemprop="name" content="Wechats">
<meta itemprop="description" content="">
......@@ -217,6 +217,33 @@ var trackOutboundLink = function(id, url) {
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/08/2019-08-17-award/" class="link primary-color dim">提名 Jenkins 中文社区激励候选人</a>
</h1>
<div class="lh-copy links">
Jenkins 中文社区贡献激励活动
<a href="/wechat/articles/2019/08/2019-08-17-award/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/08/2019-08-16-tutor-recruitment/" class="link primary-color dim">持续交付黑客松--导师招募</a>
</h1>
......@@ -454,33 +481,6 @@ var trackOutboundLink = function(id, url) {
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/07/2019-07-29-leveraging-jenkins-on-kubernetes/" class="link primary-color dim">在 Kubernetes 上使用 Jenkins </a>
</h1>
<div class="lh-copy links">
Jenkins 是一个功能强大的自动化和 CI/CD 工具,可以成为 Kubernetes 流水线的重要组成部分
<a href="/wechat/articles/2019/07/2019-07-29-leveraging-jenkins-on-kubernetes/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
</section>
</div>
......
......@@ -44,7 +44,7 @@
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://jenkins-zh.cn/wechat/" />
<meta property="og:updated_time" content="2019-07-18T00:00:00&#43;00:00"/>
<meta property="og:updated_time" content="2019-07-29T00:00:00&#43;00:00"/>
<meta itemprop="name" content="Wechats">
<meta itemprop="description" content="">
......@@ -217,6 +217,33 @@ var trackOutboundLink = function(id, url) {
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/07/2019-07-29-leveraging-jenkins-on-kubernetes/" class="link primary-color dim">在 Kubernetes 上使用 Jenkins </a>
</h1>
<div class="lh-copy links">
Jenkins 是一个功能强大的自动化和 CI/CD 工具,可以成为 Kubernetes 流水线的重要组成部分
<a href="/wechat/articles/2019/07/2019-07-29-leveraging-jenkins-on-kubernetes/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/07/2019-07-18-jenkins-weekly-release/" class="link primary-color dim">Jenkins 每周版更新</a>
</h1>
......@@ -454,33 +481,6 @@ var trackOutboundLink = function(id, url) {
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/06/2019-06-17-10-courses-to-learn-devops-engineering-in-depth/" class="link primary-color dim">10节课带你深入学习 DevOps 工程</a>
</h1>
<div class="lh-copy links">
对那些想要涉足 DevOps 领域的工程师来说,这些多样的课程提供了一个很好的开始
<a href="/wechat/articles/2019/06/2019-06-17-10-courses-to-learn-devops-engineering-in-depth/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
</section>
</div>
......
......@@ -44,7 +44,7 @@
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://jenkins-zh.cn/wechat/" />
<meta property="og:updated_time" content="2019-06-14T00:00:00&#43;00:00"/>
<meta property="og:updated_time" content="2019-06-17T00:00:00&#43;00:00"/>
<meta itemprop="name" content="Wechats">
<meta itemprop="description" content="">
......@@ -217,6 +217,33 @@ var trackOutboundLink = function(id, url) {
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/06/2019-06-17-10-courses-to-learn-devops-engineering-in-depth/" class="link primary-color dim">10节课带你深入学习 DevOps 工程</a>
</h1>
<div class="lh-copy links">
对那些想要涉足 DevOps 领域的工程师来说,这些多样的课程提供了一个很好的开始
<a href="/wechat/articles/2019/06/2019-06-17-10-courses-to-learn-devops-engineering-in-depth/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/06/2019-06-14-setup-jenkins-ci-in-30-minutes/" class="link primary-color dim">30分钟搞定 Jenkins CI</a>
</h1>
......@@ -454,33 +481,6 @@ var trackOutboundLink = function(id, url) {
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/05/2019-05-22-jacoco-coverage-for-functional-test/" class="link primary-color dim">基于 Jenkins &#43; JaCoCo 实现功能测试代码覆盖率统计</a>
</h1>
<div class="lh-copy links">
本文对 JaCoCo 进行简要介绍,并借助 Jenkins 实现功能测试代码覆盖率统计
<a href="/wechat/articles/2019/05/2019-05-22-jacoco-coverage-for-functional-test/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
</section>
</div>
......
......@@ -44,7 +44,7 @@
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://jenkins-zh.cn/wechat/" />
<meta property="og:updated_time" content="2019-05-20T00:00:00&#43;00:00"/>
<meta property="og:updated_time" content="2019-05-22T00:00:00&#43;00:00"/>
<meta itemprop="name" content="Wechats">
<meta itemprop="description" content="">
......@@ -217,6 +217,33 @@ var trackOutboundLink = function(id, url) {
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/05/2019-05-22-jacoco-coverage-for-functional-test/" class="link primary-color dim">基于 Jenkins &#43; JaCoCo 实现功能测试代码覆盖率统计</a>
</h1>
<div class="lh-copy links">
本文对 JaCoCo 进行简要介绍,并借助 Jenkins 实现功能测试代码覆盖率统计
<a href="/wechat/articles/2019/05/2019-05-22-jacoco-coverage-for-functional-test/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/05/2019-05-20-jenkins-ansible-springboot/" class="link primary-color dim">使用 Jenkins &#43; Ansible 实现 Spring Boot 自动化部署101</a>
</h1>
......@@ -454,33 +481,6 @@ var trackOutboundLink = function(id, url) {
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/05/2019-05-08-jenkins-plugin-develop-within-two-days-part02/" class="link primary-color dim">Jenkins 插件开发之旅:两天内从 idea 到发布(下篇)</a>
</h1>
<div class="lh-copy links">
两天内,从产生 idea 到编写插件,最后发布到 Jenkins 插件更新中心
<a href="/wechat/articles/2019/05/2019-05-08-jenkins-plugin-develop-within-two-days-part02/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
</section>
</div>
......
......@@ -44,7 +44,7 @@
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://jenkins-zh.cn/wechat/" />
<meta property="og:updated_time" content="2019-05-07T00:00:00&#43;00:00"/>
<meta property="og:updated_time" content="2019-05-08T00:00:00&#43;00:00"/>
<meta itemprop="name" content="Wechats">
<meta itemprop="description" content="">
......@@ -217,6 +217,33 @@ var trackOutboundLink = function(id, url) {
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/05/2019-05-08-jenkins-plugin-develop-within-two-days-part02/" class="link primary-color dim">Jenkins 插件开发之旅:两天内从 idea 到发布(下篇)</a>
</h1>
<div class="lh-copy links">
两天内,从产生 idea 到编写插件,最后发布到 Jenkins 插件更新中心
<a href="/wechat/articles/2019/05/2019-05-08-jenkins-plugin-develop-within-two-days-part02/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/05/2019-05-07-jenkins-install-plugins-shell/" class="link primary-color dim">Jenkins 自动化安装插件</a>
</h1>
......@@ -454,33 +481,6 @@ var trackOutboundLink = function(id, url) {
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/04/2019-04-22-jenkins-weekly-2.173/" class="link primary-color dim">Jenkins 2.173 发布通知</a>
</h1>
<div class="lh-copy links">
Jenkins 更新通知
<a href="/wechat/articles/2019/04/2019-04-22-jenkins-weekly-2.173/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
</section>
</div>
......
......@@ -44,7 +44,7 @@
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://jenkins-zh.cn/wechat/" />
<meta property="og:updated_time" content="2019-04-19T00:00:00&#43;00:00"/>
<meta property="og:updated_time" content="2019-04-22T00:00:00&#43;00:00"/>
<meta itemprop="name" content="Wechats">
<meta itemprop="description" content="">
......@@ -217,6 +217,33 @@ var trackOutboundLink = function(id, url) {
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/04/2019-04-22-jenkins-weekly-2.173/" class="link primary-color dim">Jenkins 2.173 发布通知</a>
</h1>
<div class="lh-copy links">
Jenkins 更新通知
<a href="/wechat/articles/2019/04/2019-04-22-jenkins-weekly-2.173/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/04/2019-04-19-the-business-value-of-cd/" class="link primary-color dim">持续交付的商业价值</a>
</h1>
......@@ -454,33 +481,6 @@ var trackOutboundLink = function(id, url) {
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/03/2019-03-13-electron-pipeline-demo/" class="link primary-color dim">Electron 应用的流水线设计</a>
</h1>
<div class="lh-copy links">
跨平台构建的流水线 demo
<a href="/wechat/articles/2019/03/2019-03-13-electron-pipeline-demo/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
</section>
</div>
......
......@@ -217,6 +217,33 @@ var trackOutboundLink = function(id, url) {
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/03/2019-03-13-electron-pipeline-demo/" class="link primary-color dim">Electron 应用的流水线设计</a>
</h1>
<div class="lh-copy links">
跨平台构建的流水线 demo
<a href="/wechat/articles/2019/03/2019-03-13-electron-pipeline-demo/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/03/2019-03-13-gsoc2019-announcement/" class="link primary-color dim">Jenkins 已经被 Google Summer Of Code 2019 接受!</a>
</h1>
......@@ -454,33 +481,6 @@ var trackOutboundLink = function(id, url) {
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2018/12/2018-12-26-official-docker-image/" class="link primary-color dim">Docker Hub 上的官方 Jenkins 镜像</a>
</h1>
<div class="lh-copy links">
正确地使用 Jenkins 镜像
<a href="/wechat/articles/2018/12/2018-12-26-official-docker-image/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
</section>
</div>
......
......@@ -216,6 +216,33 @@ var trackOutboundLink = function(id, url) {
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2018/12/2018-12-26-official-docker-image/" class="link primary-color dim">Docker Hub 上的官方 Jenkins 镜像</a>
</h1>
<div class="lh-copy links">
正确地使用 Jenkins 镜像
<a href="/wechat/articles/2018/12/2018-12-26-official-docker-image/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2018/12/2018-12-12-gasc/" class="link primary-color dim">Jenkins Configuration-as-Code: 看,我都不用手动配置</a>
</h1>
......@@ -458,33 +485,6 @@ Jenkins 中文社区邀您参与社区共同成长 在开源盛会开展的同
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/01/2019-01-23-configuring-jenkins-pipeline-with-yaml-file/" class="link primary-color dim">使用 YAML 文件配置 Jenkins 流水线</a>
</h1>
<div class="lh-copy links">
这也是一种自定义流水线 DSL 的方法
<a href="/wechat/articles/2019/01/2019-01-23-configuring-jenkins-pipeline-with-yaml-file/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
</section>
</div>
......
......@@ -216,6 +216,33 @@ var trackOutboundLink = function(id, url) {
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/01/2019-01-23-configuring-jenkins-pipeline-with-yaml-file/" class="link primary-color dim">使用 YAML 文件配置 Jenkins 流水线</a>
</h1>
<div class="lh-copy links">
这也是一种自定义流水线 DSL 的方法
<a href="/wechat/articles/2019/01/2019-01-23-configuring-jenkins-pipeline-with-yaml-file/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2018/12/2018-12-25-year-in-review/" class="link primary-color dim">回顾 2018: 革新的一年</a>
</h1>
......
......@@ -44,7 +44,7 @@
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://jenkins-zh.cn/wechat/" />
<meta property="og:updated_time" content="2020-07-01T00:00:00&#43;00:00"/>
<meta property="og:updated_time" content="2020-07-02T00:00:00&#43;00:00"/>
<meta itemprop="name" content="Wechats">
<meta itemprop="description" content="">
......@@ -217,6 +217,33 @@ var trackOutboundLink = function(id, url) {
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2020/07/2020-07-02-jcli-v0.0.29/" class="link primary-color dim">Jenkins CLI 命令行 v0.0.29</a>
</h1>
<div class="lh-copy links">
jcli-v0.0.29 发布
<a href="/wechat/articles/2020/07/2020-07-02-jcli-v0.0.29/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2020/07/2020-07-01-monitoring-linux-logs-with-kibana-and-rsyslog/" class="link primary-color dim">使用 Kibana 和 Rsyslog 监控 Linux 日志</a>
</h1>
......@@ -454,33 +481,6 @@ var trackOutboundLink = function(id, url) {
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2020/05/2020-05-20-devops-with-docker-kubernetes-and-azure-devops/" class="link primary-color dim">使用 Docker、Kubernetes 和 Azure DevOps 实现 DevOps</a>
</h1>
<div class="lh-copy links">
介绍了整个软件开发的发展历程,并介绍了 DevOps 的方法论
<a href="/wechat/articles/2020/05/2020-05-20-devops-with-docker-kubernetes-and-azure-devops/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
</section>
</div>
......
......@@ -44,7 +44,7 @@
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://jenkins-zh.cn/wechat/" />
<meta property="og:updated_time" content="2020-05-19T00:00:00&#43;00:00"/>
<meta property="og:updated_time" content="2020-05-20T00:00:00&#43;00:00"/>
<meta itemprop="name" content="Wechats">
<meta itemprop="description" content="">
......@@ -217,6 +217,33 @@ var trackOutboundLink = function(id, url) {
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2020/05/2020-05-20-devops-with-docker-kubernetes-and-azure-devops/" class="link primary-color dim">使用 Docker、Kubernetes 和 Azure DevOps 实现 DevOps</a>
</h1>
<div class="lh-copy links">
介绍了整个软件开发的发展历程,并介绍了 DevOps 的方法论
<a href="/wechat/articles/2020/05/2020-05-20-devops-with-docker-kubernetes-and-azure-devops/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2020/05/2020-05-19-jenkins-kubesphere-partner/" class="link primary-color dim">Jenkins 中文社区携手 KubeSphere,共建 DevOps 技术生态</a>
</h1>
......@@ -454,33 +481,6 @@ var trackOutboundLink = function(id, url) {
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2020/04/2020-04-29-starting-local-kubernetes-using-kind-and-docker/" class="link primary-color dim">使用 kind 和 Docker 启动本地的 Kubernetes</a>
</h1>
<div class="lh-copy links">
介绍了 kind 这款工具,并且通过例子讲解了怎样通过 kind 在你本地的机器上部署应用到 Kubernetes 集群
<a href="/wechat/articles/2020/04/2020-04-29-starting-local-kubernetes-using-kind-and-docker/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
</section>
</div>
......
......@@ -44,7 +44,7 @@
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://jenkins-zh.cn/wechat/" />
<meta property="og:updated_time" content="2020-04-22T00:00:00&#43;00:00"/>
<meta property="og:updated_time" content="2020-04-29T00:00:00&#43;00:00"/>
<meta itemprop="name" content="Wechats">
<meta itemprop="description" content="">
......@@ -217,6 +217,33 @@ var trackOutboundLink = function(id, url) {
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2020/04/2020-04-29-starting-local-kubernetes-using-kind-and-docker/" class="link primary-color dim">使用 kind 和 Docker 启动本地的 Kubernetes</a>
</h1>
<div class="lh-copy links">
介绍了 kind 这款工具,并且通过例子讲解了怎样通过 kind 在你本地的机器上部署应用到 Kubernetes 集群
<a href="/wechat/articles/2020/04/2020-04-29-starting-local-kubernetes-using-kind-and-docker/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2020/04/2020-04-24-jenkins-release/" class="link primary-color dim">Jenkins 长期支持版更新</a>
</h1>
......@@ -454,33 +481,6 @@ var trackOutboundLink = function(id, url) {
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2020/03/2020-03-26-thanks-ucloud/" class="link primary-color dim">致 UCloud 的一封感谢信</a>
</h1>
<div class="lh-copy links">
Jenkins 中文社区会在 UCloud 的帮助下为用户提供给好的服务
<a href="/wechat/articles/2020/03/2020-03-26-thanks-ucloud/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
</section>
</div>
......
......@@ -44,7 +44,7 @@
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://jenkins-zh.cn/wechat/" />
<meta property="og:updated_time" content="2020-03-24T00:00:00&#43;00:00"/>
<meta property="og:updated_time" content="2020-03-26T00:00:00&#43;00:00"/>
<meta itemprop="name" content="Wechats">
<meta itemprop="description" content="">
......@@ -217,6 +217,33 @@ var trackOutboundLink = function(id, url) {
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2020/03/2020-03-26-thanks-ucloud/" class="link primary-color dim">致 UCloud 的一封感谢信</a>
</h1>
<div class="lh-copy links">
Jenkins 中文社区会在 UCloud 的帮助下为用户提供给好的服务
<a href="/wechat/articles/2020/03/2020-03-26-thanks-ucloud/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2020/03/2020-03-24-7-devops-toolchains-orchestration-solutions-you-may-not-know/" class="link primary-color dim">7 款你或许不知道的 DevOps 工具链编排解决方案</a>
</h1>
......@@ -454,33 +481,6 @@ var trackOutboundLink = function(id, url) {
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2020/02/2020-02-24-jcli-v0.0.26/" class="link primary-color dim">Jenkins CLI 命令行 v0.0.26</a>
</h1>
<div class="lh-copy links">
jcli-v0.0.26 发布
<a href="/wechat/articles/2020/02/2020-02-24-jcli-v0.0.26/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
</section>
</div>
......
......@@ -44,7 +44,7 @@
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://jenkins-zh.cn/wechat/" />
<meta property="og:updated_time" content="2020-02-21T00:00:00&#43;00:00"/>
<meta property="og:updated_time" content="2020-02-24T00:00:00&#43;00:00"/>
<meta itemprop="name" content="Wechats">
<meta itemprop="description" content="">
......@@ -217,6 +217,33 @@ var trackOutboundLink = function(id, url) {
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2020/02/2020-02-24-jcli-v0.0.26/" class="link primary-color dim">Jenkins CLI 命令行 v0.0.26</a>
</h1>
<div class="lh-copy links">
jcli-v0.0.26 发布
<a href="/wechat/articles/2020/02/2020-02-24-jcli-v0.0.26/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2020/02/2020-02-21-the-abc-of-devops-implementation-with-containerization-and-docker/" class="link primary-color dim">使用容器化和 Docker 实现 DevOps 的基础知识</a>
</h1>
......@@ -454,33 +481,6 @@ var trackOutboundLink = function(id, url) {
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/12/2019-12-26-jcli-v0.0.24/" class="link primary-color dim">Jenkins CLI 命令行 v0.0.24</a>
</h1>
<div class="lh-copy links">
jcli-v0.0.24 发布
<a href="/wechat/articles/2019/12/2019-12-26-jcli-v0.0.24/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
</section>
</div>
......
......@@ -44,7 +44,7 @@
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://jenkins-zh.cn/wechat/" />
<meta property="og:updated_time" content="2019-12-23T00:00:00&#43;00:00"/>
<meta property="og:updated_time" content="2019-12-26T00:00:00&#43;00:00"/>
<meta itemprop="name" content="Wechats">
<meta itemprop="description" content="">
......@@ -217,6 +217,33 @@ var trackOutboundLink = function(id, url) {
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/12/2019-12-26-jcli-v0.0.24/" class="link primary-color dim">Jenkins CLI 命令行 v0.0.24</a>
</h1>
<div class="lh-copy links">
jcli-v0.0.24 发布
<a href="/wechat/articles/2019/12/2019-12-26-jcli-v0.0.24/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/12/2019-12-23-generic-webhook-trigger-plugin/" class="link primary-color dim">Webhook 通用触发插件</a>
</h1>
......@@ -454,33 +481,6 @@ var trackOutboundLink = function(id, url) {
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/11/2019-11-14-gsoc-phase-1-updates-on-working-hours-plugin/" class="link primary-color dim">Working Hours 插件的第一阶段更新</a>
</h1>
<div class="lh-copy links">
实现了 Working Hours Plugin 和 React 集成,提供更加好用的排除日期和时间范围选择器
<a href="/wechat/articles/2019/11/2019-11-14-gsoc-phase-1-updates-on-working-hours-plugin/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
</section>
</div>
......
......@@ -44,7 +44,7 @@
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://jenkins-zh.cn/wechat/" />
<meta property="og:updated_time" content="2019-11-13T00:00:00&#43;00:00"/>
<meta property="og:updated_time" content="2019-11-14T00:00:00&#43;00:00"/>
<meta itemprop="name" content="Wechats">
<meta itemprop="description" content="">
......@@ -217,6 +217,33 @@ var trackOutboundLink = function(id, url) {
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/11/2019-11-14-gsoc-phase-1-updates-on-working-hours-plugin/" class="link primary-color dim">Working Hours 插件的第一阶段更新</a>
</h1>
<div class="lh-copy links">
实现了 Working Hours Plugin 和 React 集成,提供更加好用的排除日期和时间范围选择器
<a href="/wechat/articles/2019/11/2019-11-14-gsoc-phase-1-updates-on-working-hours-plugin/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/11/2019-11-13-a-thanks-letter/" class="link primary-color dim">致霍格沃兹测试学院的一封感谢信</a>
</h1>
......@@ -454,33 +481,6 @@ var trackOutboundLink = function(id, url) {
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/10/2019-10-17-jcli-v0.0.21/" class="link primary-color dim">Jenkins CLI 命令行</a>
</h1>
<div class="lh-copy links">
jcli-v0.0.21 发布
<a href="/wechat/articles/2019/10/2019-10-17-jcli-v0.0.21/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
</section>
</div>
......
......@@ -44,7 +44,7 @@
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://jenkins-zh.cn/wechat/" />
<meta property="og:updated_time" content="2019-09-27T00:00:00&#43;00:00"/>
<meta property="og:updated_time" content="2019-10-17T00:00:00&#43;00:00"/>
<meta itemprop="name" content="Wechats">
<meta itemprop="description" content="">
......@@ -217,6 +217,33 @@ var trackOutboundLink = function(id, url) {
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/10/2019-10-17-jcli-v0.0.21/" class="link primary-color dim">Jenkins CLI 命令行</a>
</h1>
<div class="lh-copy links">
jcli-v0.0.21 发布
<a href="/wechat/articles/2019/10/2019-10-17-jcli-v0.0.21/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/09/2019-09-27-jenkins-in-hacktoberfest/" class="link primary-color dim">Jenkins 喊你参加 Hacktoberfest</a>
</h1>
......@@ -454,33 +481,6 @@ var trackOutboundLink = function(id, url) {
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/08/2019-08-17-award/" class="link primary-color dim">提名 Jenkins 中文社区激励候选人</a>
</h1>
<div class="lh-copy links">
Jenkins 中文社区贡献激励活动
<a href="/wechat/articles/2019/08/2019-08-17-award/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
</section>
</div>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册