继续上一篇的话题,既然已经搭建了 GitLab 的代码仓库,那么现在就可以开始进行下一步持续集成环境的搭建了。公司准备利用 Jenkins CI 进行持续集成,本文记录了 Jenkins 的安装、基础配置、界面美化、常用插件及常见错误处理。
1. 安装 Jenkins
准备工作
安装 JDK,并配置环境变量
安装 maven
配置阿里云的 maven 镜像源地址,
vim /usr/share/maven/conf/settings.xml
将👇内容添加进mirrors
节点1
2
3
4
5
6
7<mirror>
<!--This sends everything else to /public -->
<id>nexus-aliyun</id>
<mirrorOf>\*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>安装 git
配置镜像源地址
1 | sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo |
修改访问 IP 和 端口号
vim /etc/sysconfig/jenkins
JENKINS\_PORT="10080"
配置 JDK 路径到 Jenkins 中
vim /etc/init.d/jenkins
将自己的 java 目录加入到
candidates
里1
2
3
4
5
6
7
8
9candidates="
/etc/alternatives/java
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/lib/jvm/java-1.7.0/bin/java
/usr/lib/jvm/jre-1.7.0/bin/java
/usr/bin/java
/opt/jdk1.8.0\_144/bin/java
"
安装完毕后启动
1 | sudo service jenkins start # 启动jenkins服务 |
2. 配置 Jenkins
初始化密码
cat /var/lib/jenkins/secrets/initialAdminPassword
安装插件
选择左侧推荐的插件安装即可
配置管理员账号密码
配置 JDK、Maven、Git、Docker
系统管理 → 全局工具配置(尽量在服务器本地安装,然后输入安装路径,不推荐使用在线安装,因为在线安装有些资源都在国外,下载速度极慢)
配置邮件服务器信息
系统管理 → 系统设置,①Jenkins Location→系统管理员邮件地址②Extended E-mail Notification③邮件通知。
其中 Extended E-mail Notification 的两个地方可以做个性化配置:
Default Content Type 邮件的内容类型,改为
HTML(text/html)
。Default Subject 邮件的标题,改为
构建通知:$PROJECT\_NAME - Build # $BUILD\_NUMBER - $BUILD\_STATUS!
。Default Content 邮件的内容,改为👇内容。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<html>
<head>
<meta charset="UTF-8">
<title>${PROJECT\_NAME}-第${BUILD\_NUMBER}次构建日志</title>
</head>
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0">
<table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>
<td>(本邮件是程序自动下发的,请勿回复!)</td>
</tr>
<tr>
<td><h2>
<font color="#0000FF">构建结果 - ${BUILD\_STATUS}</font>
</h2></td>
</tr>
<tr>
<td><br />
<b><font color="#0B610B">构建信息</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>项目名称: ${PROJECT\_NAME}</li>
<li>构建编号: 第${BUILD\_NUMBER}次构建</li>
<li>触发原因: ${CAUSE}</li>
<li>构建日志: <a href="${BUILD\_URL}console">${BUILD\_URL}console</a></li>
<li>构建Url: <a href="${BUILD\_URL}">${BUILD\_URL}</a></li>
<li>工作目录: <a href="${PROJECT\_URL}ws">${PROJECT\_URL}ws</a></li>
<li>项目Url: <a href="${PROJECT\_URL}">${PROJECT\_URL}</a></li>
</ul>
</td>
</tr>
<tr>
<td><b><font color="#0B610B">Changes Since Last Successful Build:</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>历史变更记录 : <a href="${PROJECT\_URL}changes">${PROJECT\_URL}changes</a></li>
</ul> ${CHANGES\_SINCE\_LAST\_SUCCESS,reverse=true, format="Changes for Build #%n:<br />%c<br />",showPaths=true,changesFormat="<pre>\[%a\]<br />%m</pre>",pathFormat=" %p"}
</td>
</tr>
<tr>
<td><b>Test Informations</b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td><pre style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">Total:${TEST\_COUNTS,var="total"},Pass:${TEST\_COUNTS,var="pass"},Failed:${TEST\_COUNTS,var="fail"},Skiped:${TEST\_COUNTS,var="skip"}</pre>
<br /></td>
</tr>
<tr>
<td><b><font color="#0B610B">构建日志 (最后 100行):</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td><textarea cols="80" rows="30" readonly="readonly" style="font-family: Courier New">${BUILD\_LOG, maxLines=100}</textarea>
</td>
</tr>
</table>
</body>
</html>勾选上 Enable Debug Mode、Require Administrator for Template Testing、Enable watching for jobs、Allow sending to unregistered users
3. 美化 Jenkins
安利一款 material 风格的主题:http://afonsof.com/jenkins-material-theme/ ,支持使用 CDN,也支持自定义公司 logo 等等。
4. 常用插件
- Maven Integration plugin:用于构建 Maven 项目
- Gitlab Hook Plugin:用于触发 GitLab 的一些 WebHooks 来构建项目
- Simple Theme Plugin:配合上面的美化 Jenkins 使用
- FireLine Plugin:代码规范检查,已经集成了阿里巴巴的代码规约(P3C)检查
- HTML Publisher plugin:将一些测试结果变成 HTML 文档
- JUnit Plugin:JUnit 测试
- Checkstyle Plug-in:检测代码风格
- FindBugs Plug-in:检测构建出来的 class 文件是否安全
- Static Analysis Collector Plug-in:对 7、8 两个插件检测出来的结果进行汇总
- Extended E-mail Notification:个性化邮件模板
- Dingding\[钉钉\] Plugin:钉钉通知插件
5. 常见错误解决
添加镜像源的时候出现如下错误:
1 | Resolving pkg.jenkins-ci.org (pkg.jenkins-ci.org)... failed: Temporary failure in name resolution. |
解决方法:
vim /etc/resolv.conf
添加一行 nameserver 8.8.8.8
HTML Publisher Plugin 插件在新的 Jenkins 版本中,打开生成的网页中无法加载 CSS、无法点击按钮等情况:
由于 CSP(Content Security Policy)所致,可在 系统管理→脚本命令行 中执行:
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","")