Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Jenkins 中文社区
Jenkins 中文社区官方网站
提交
3afa074b
J
Jenkins 中文社区官方网站
项目概览
Jenkins 中文社区
/
Jenkins 中文社区官方网站
通知
0
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
Jenkins 中文社区官方网站
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
3afa074b
编写于
9月 07, 2020
作者:
L
LinuxSuRen
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Automated deployment to GitHub Pages on 1599448070
上级
56a5bb65
变更
28
展开全部
隐藏空白更改
内联
并排
Showing
28 changed file
with
1439 addition
and
489 deletion
+1439
-489
index.html
index.html
+10
-10
index.json
index.json
+14
-1
index.xml
index.xml
+13
-0
sitemap.xml
sitemap.xml
+6
-1
wechat/articles/2019/11/2019-11-12-2019-jenkins-board-and-officer-elections-update/index.html
...019-jenkins-board-and-officer-elections-update/index.html
+2
-2
wechat/articles/2020/09/2020-09-02-devops-adoption-approach-build-and-deploy/index.html
...9-02-devops-adoption-approach-build-and-deploy/index.html
+8
-0
wechat/articles/2020/09/2020-09-07-jenkins-json-build/index.html
...articles/2020/09/2020-09-07-jenkins-json-build/index.html
+871
-0
wechat/articles/2020/09/2020-09-07-jenkins-json-build/jenkins-json-build-04.png
...9/2020-09-07-jenkins-json-build/jenkins-json-build-04.png
+0
-0
wechat/articles/2020/09/2020-09-07-jenkins-json-build/jenkins-json-build-logo.png
...2020-09-07-jenkins-json-build/jenkins-json-build-logo.png
+0
-0
wechat/index.html
wechat/index.html
+28
-28
wechat/index.xml
wechat/index.xml
+14
-1
wechat/page/10/index.html
wechat/page/10/index.html
+28
-28
wechat/page/11/index.html
wechat/page/11/index.html
+28
-28
wechat/page/12/index.html
wechat/page/12/index.html
+28
-28
wechat/page/13/index.html
wechat/page/13/index.html
+28
-28
wechat/page/14/index.html
wechat/page/14/index.html
+28
-28
wechat/page/15/index.html
wechat/page/15/index.html
+28
-28
wechat/page/16/index.html
wechat/page/16/index.html
+27
-27
wechat/page/17/index.html
wechat/page/17/index.html
+27
-27
wechat/page/18/index.html
wechat/page/18/index.html
+27
-0
wechat/page/2/index.html
wechat/page/2/index.html
+28
-28
wechat/page/3/index.html
wechat/page/3/index.html
+28
-28
wechat/page/4/index.html
wechat/page/4/index.html
+28
-28
wechat/page/5/index.html
wechat/page/5/index.html
+28
-28
wechat/page/6/index.html
wechat/page/6/index.html
+28
-28
wechat/page/7/index.html
wechat/page/7/index.html
+28
-28
wechat/page/8/index.html
wechat/page/8/index.html
+28
-28
wechat/page/9/index.html
wechat/page/9/index.html
+28
-28
未找到文件。
index.html
浏览文件 @
3afa074b
...
...
@@ -1846,32 +1846,32 @@ RU5ErkJggg==" />
<a
href=
"/event/beijing-2019-0
8-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.jp
g"
></img>
<a
href=
"/event/beijing-2019-0
7-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.jpe
g"
></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.pn
g"
></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.jpe
g"
></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-0
7-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.jpe
g"
></img>
<a
href=
"/event/beijing-2019-0
8-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.jp
g"
></img>
</a>
...
...
index.json
浏览文件 @
3afa074b
...
...
@@ -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-0
2
00:00:00 +0000 UTC",
"date": "2020-09-0
7
00:00:00 +0000 UTC",
"tags": [],
"description": "",
"content": "",
index.xml
浏览文件 @
3afa074b
...
...
@@ -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(
'
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.
</description>
</item>
<item>
<title></title>
<link>
https://jenkins-zh.cn/meeting/2020-09-02/
</link>
...
...
sitemap.xml
浏览文件 @
3afa074b
...
...
@@ -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-0
2
T00:00:00+00:00
</lastmod>
<lastmod>
2020-09-0
7
T00:00:00+00:00
</lastmod>
<priority>
0
</priority>
</url>
...
...
wechat/articles/2019/11/2019-11-12-2019-jenkins-board-and-officer-elections-update/index.html
浏览文件 @
3afa074b
...
...
@@ -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>
...
...
wechat/articles/2020/09/2020-09-02-devops-adoption-approach-build-and-deploy/index.html
浏览文件 @
3afa074b
...
...
@@ -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 项目第一阶段总结"
>
...
...
wechat/articles/2020/09/2020-09-07-jenkins-json-build/index.html
0 → 100644
浏览文件 @
3afa074b
此差异已折叠。
点击以展开。
wechat/articles/2020/09/2020-09-07-jenkins-json-build/jenkins-json-build-04.png
0 → 100644
浏览文件 @
3afa074b
33.5 KB
wechat/articles/2020/09/2020-09-07-jenkins-json-build/jenkins-json-build-logo.png
0 → 100644
浏览文件 @
3afa074b
65.9 KB
wechat/index.html
浏览文件 @
3afa074b
...
...
@@ -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-0
2
T00:00:00+00:00"
/>
<meta
property=
"og:updated_time"
content=
"2020-09-0
7
T00:00:00+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"
>
查看更多
»
</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"
>
查看更多
»
</a>
</div>
</div>
</div>
</section>
</div>
...
...
wechat/index.xml
浏览文件 @
3afa074b
...
...
@@ -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(
'
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.
</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>
...
...
wechat/page/10/index.html
浏览文件 @
3afa074b
...
...
@@ -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-1
6
T00:00:00+00:00"
/>
<meta
property=
"og:updated_time"
content=
"2019-08-1
7
T00:00:00+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"
>
查看更多
»
</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"
>
查看更多
»
</a>
</div>
</div>
</div>
</section>
</div>
...
...
wechat/page/11/index.html
浏览文件 @
3afa074b
...
...
@@ -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-
18
T00:00:00+00:00"
/>
<meta
property=
"og:updated_time"
content=
"2019-07-
29
T00:00:00+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"
>
查看更多
»
</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"
>
查看更多
»
</a>
</div>
</div>
</div>
</section>
</div>
...
...
wechat/page/12/index.html
浏览文件 @
3afa074b
...
...
@@ -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-1
4
T00:00:00+00:00"
/>
<meta
property=
"og:updated_time"
content=
"2019-06-1
7
T00:00:00+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"
>
查看更多
»
</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
+
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"
>
查看更多
»
</a>
</div>
</div>
</div>
</section>
</div>
...
...
wechat/page/13/index.html
浏览文件 @
3afa074b
...
...
@@ -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-2
0
T00:00:00+00:00"
/>
<meta
property=
"og:updated_time"
content=
"2019-05-2
2
T00:00:00+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
+
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"
>
查看更多
»
</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
+
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"
>
查看更多
»
</a>
</div>
</div>
</div>
</section>
</div>
...
...
wechat/page/14/index.html
浏览文件 @
3afa074b
...
...
@@ -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-0
7
T00:00:00+00:00"
/>
<meta
property=
"og:updated_time"
content=
"2019-05-0
8
T00:00:00+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"
>
查看更多
»
</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"
>
查看更多
»
</a>
</div>
</div>
</div>
</section>
</div>
...
...
wechat/page/15/index.html
浏览文件 @
3afa074b
...
...
@@ -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-
19
T00:00:00+00:00"
/>
<meta
property=
"og:updated_time"
content=
"2019-04-
22
T00:00:00+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"
>
查看更多
»
</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"
>
查看更多
»
</a>
</div>
</div>
</div>
</section>
</div>
...
...
wechat/page/16/index.html
浏览文件 @
3afa074b
...
...
@@ -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"
>
查看更多
»
</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"
>
查看更多
»
</a>
</div>
</div>
</div>
</section>
</div>
...
...
wechat/page/17/index.html
浏览文件 @
3afa074b
...
...
@@ -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"
>
查看更多
»
</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"
>
查看更多
»
</a>
</div>
</div>
</div>
</section>
</div>
...
...
wechat/page/18/index.html
浏览文件 @
3afa074b
...
...
@@ -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"
>
查看更多
»
</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>
...
...
wechat/page/2/index.html
浏览文件 @
3afa074b
...
...
@@ -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-0
1
T00:00:00+00:00"
/>
<meta
property=
"og:updated_time"
content=
"2020-07-0
2
T00:00:00+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"
>
查看更多
»
</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"
>
查看更多
»
</a>
</div>
</div>
</div>
</section>
</div>
...
...
wechat/page/3/index.html
浏览文件 @
3afa074b
...
...
@@ -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-
19
T00:00:00+00:00"
/>
<meta
property=
"og:updated_time"
content=
"2020-05-
20
T00:00:00+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"
>
查看更多
»
</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"
>
查看更多
»
</a>
</div>
</div>
</div>
</section>
</div>
...
...
wechat/page/4/index.html
浏览文件 @
3afa074b
...
...
@@ -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-2
2
T00:00:00+00:00"
/>
<meta
property=
"og:updated_time"
content=
"2020-04-2
9
T00:00:00+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"
>
查看更多
»
</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"
>
查看更多
»
</a>
</div>
</div>
</div>
</section>
</div>
...
...
wechat/page/5/index.html
浏览文件 @
3afa074b
...
...
@@ -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-2
4
T00:00:00+00:00"
/>
<meta
property=
"og:updated_time"
content=
"2020-03-2
6
T00:00:00+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"
>
查看更多
»
</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"
>
查看更多
»
</a>
</div>
</div>
</div>
</section>
</div>
...
...
wechat/page/6/index.html
浏览文件 @
3afa074b
...
...
@@ -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-2
1
T00:00:00+00:00"
/>
<meta
property=
"og:updated_time"
content=
"2020-02-2
4
T00:00:00+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"
>
查看更多
»
</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"
>
查看更多
»
</a>
</div>
</div>
</div>
</section>
</div>
...
...
wechat/page/7/index.html
浏览文件 @
3afa074b
...
...
@@ -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-2
3
T00:00:00+00:00"
/>
<meta
property=
"og:updated_time"
content=
"2019-12-2
6
T00:00:00+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"
>
查看更多
»
</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"
>
查看更多
»
</a>
</div>
</div>
</div>
</section>
</div>
...
...
wechat/page/8/index.html
浏览文件 @
3afa074b
...
...
@@ -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-1
3
T00:00:00+00:00"
/>
<meta
property=
"og:updated_time"
content=
"2019-11-1
4
T00:00:00+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"
>
查看更多
»
</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"
>
查看更多
»
</a>
</div>
</div>
</div>
</section>
</div>
...
...
wechat/page/9/index.html
浏览文件 @
3afa074b
...
...
@@ -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-2
7T00:00:00+00:00"
/>
<meta
property=
"og:updated_time"
content=
"2019-
10-1
7T00:00:00+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"
>
查看更多
»
</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"
>
查看更多
»
</a>
</div>
</div>
</div>
</section>
</div>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录