继续上一篇的话题,既然已经搭建了 GitLab 的代码仓库,那么现在就可以开始进行下一步持续集成环境的搭建了。公司准备利用 Jenkins CI 进行持续集成,本文记录了 Jenkins 的安装、基础配置、界面美化、常用插件及常见错误处理。
1. 安装Jenkins
准备工作
-
安装 JDK,并配置环境变量
-
安装 maven
-
配置阿里云的 maven 镜像源地址,
vim /usr/share/maven/conf/settings.xml将👇内容添加进mirrors节点<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
配置镜像源地址
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install jenkins
修改访问 IP 和 端口号
vim /etc/sysconfig/jenkinsJENKINS_PORT="10080"
配置 JDK 路径到 Jenkins 中
-
vim /etc/init.d/jenkins -
将自己的 java 目录加入到
candidates里candidates=" /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 "
安装完毕后启动
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 邮件的内容,改为👇内容。
<!DOCTYPE html> <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. 常见错误解决
添加镜像源的时候出现如下错误:
Resolving pkg.jenkins-ci.org (pkg.jenkins-ci.org)... failed: Temporary failure in name resolution.
wget: unable to resolve host address ‘pkg.jenkins-ci.org’
解决方法:
vim /etc/resolv.conf 添加一行 nameserver 8.8.8.8
HTML Publisher Plugin 插件在新的Jenkins版本中,打开生成的网页中无法加载CSS、无法点击按钮等情况:
由于 CSP(Content Security Policy)所致,可在 系统管理→脚本命令行 中执行:
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","")