华为镜像源(提供各软件和镜像的相关下载):https://mirrors.huaweicloud.com/
阿里云镜像源(提供各软件和镜像的相关下载):https://developer.aliyun.com/mirror/
目录
Jenkins使用文档
Jenkins 是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。本文以 CentOS7 环境为例,总结了 Jenkins 的安装与配置、邮件功能使用,并接入阿里巴巴的著名开源项目 fastjson,以此演示 Java 项目(SVN+Maven)中 FindBugs/CheckStyle/PMD 等常用插件的使用、单元测试及其覆盖率报告等,力求实战性强。
1 安装 Jenkins
jenkins下载:
war:https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/2.240/jenkins.war
1. 镜像1:清华镜像
2 .镜像2:http://mirrors.jenkins-ci.org/
3. 官方下载地址:https://jenkins.io/zh/download/
1.1 安装 JDK/Maven
Jenkins 自身采用 Java 开发,所以要必须安装 JDK;
本文集成的项目基于 Maven 构架,所以 Maven 也必须安装;
下载地址:https://repo.huaweicloud.com/ 华为云地址下载速度非常快
配置环境变量:#sudo vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8
export CLASSPATH=${JAVA_HOME}/lib
export PATH=$PATH:${JAVA_HOME}/bin
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
export MAVEN_HOME=/usr/local/maven/apache-maven-3.6.3
export PATH=$PATH:${MAVEN_HOME}/bin
1.2 安装 Jenkins
以下四种方法任选一种,推荐第一种。
1.2.1 离线安装
## http://pkg.jenkins-ci.org/redhat/
wget http://pkg.jenkins-ci.org/redhat/jenkins-2.39-1.1.noarch.rpm ## 下载(也可以Windows下载再转过来)
sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins.io.key ## 公钥
sudo yum -y install jenkins-*.noarch.rpm
1.2.2 在线安装
## http://pkg.jenkins-ci.org/redhat/
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
sudo yum -y install jenkins
1.2.3 基于 Tomcat 安装
- 安装并启动 Tomcat;
- 从官网下载 jenkins.war 至 $CATALINA_BASE/webapps,Tomcat 会自动部署;
- 浏览器访问:http://centos:8080/jenkins/
1.2.4 免安装方式
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
sudo java -jar jenkens.war ## 启动服务,直至看到日志 `Jenkins is fully up and running`
curl http://localhost:8080/ ## Jenkins 已就绪
1.3 调整配置文件
## sudo vim /etc/sysconfig/jenkins
JENKINS_USER="root" ## 原值 "jenkins" 必须修改,否则权限不足
JENKINS_PORT="8080" ## 原值 "8080" 可以不修改
## 还有开启 HTTPS 相关参数,此处不打算开启,故不作说明
安装目录: /usr/lib/jenkins
工作目录: /var/lib/jenkins(对应于环境变量 JENKINS_HOME)
1.4 启动
sudo systemctl enable jenkins
sudo systemctl restart jenkins
查看日志文件: sudo tail -f /var/log/jenkins/jenkins.log
启动后会生成文件 hudson.model.UpdateCenter.xml,需要修改它,
否则浏览器首次进入时会卡在“Jenkins 正在启动,请稍后…”
## 原值: http://updates.jenkins-ci.org/update-center.json
## 新值: http://mirror.xmission.com/jenkins/updates/update-center.json
## 或者: http://mirror.xmission.com/jenkins/updates/current/update-center.json
sudo cat /var/lib/jenkins/hudson.model.UpdateCenter.xml
sudo sed -i 's/updates.jenkins-ci.org/mirror.xmission.com\/jenkins\/updates/g' /var/lib/jenkins/hudson.model.UpdateCenter.xml
sudo cat /var/lib/jenkins/hudson.model.UpdateCenter.xml
sudo systemctl restart jenkins
1.5 防火墙放行
### sudo vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
### 重启生效: sudo systemctl restart iptables
1.6 卸载
如果要重装,或者本机不需要 Jenkins,可卸载:
sudo systemctl stop jenkins
sudo systemctl disable jenkins
sudo yum -y remove jenkins
sudo rm -rf /var/{lib,log,cache}/jenkins /usr/lib/jenkins /root/.jenkins
sudo rm -rf `sudo find /{etc,var,run} -name "jenkins*"`
1.7启动脚本(手动启动jar,强烈推荐用这种)
#!/bin/bash
port=80
echo "正在启动jenkins,端口$port"
sudo fuser -k -n tcp $port
nohup java -Dhudson.model.DirectoryBrowserSupport.CSP= -jar jenkins.war --httpPort=$port > log.log 2>&1 &
2 基本配置
2.1 登录
浏览器进入 http://centos:8080/
首次进入需要输入初始密码来解锁,初始密码查看方法: sudo cat /var/lib/jenkins/secrets/initialAdminPassword
进入 Jenkins 定制界面,让选择 Install suggested plugins 或 Select plugins to install 时,两者都不要选,直接关闭,下一个界面点击“Start using Jenkins”;
修改登录密码:主界面右上角“注销”链接的左边的用户名下拉菜单中点“设置”。
2.2 安全设置
默认情况下,任何用户都可以使用 Jenkins 进行发布。
可以进入相关设置:系统管理 / Configure Global Security,
选择 Jenkins专有用户数据库,不要选中 允许用户注册;
选择 登录用户可以做任何事,选中 Allow anonymous read access
2.3 插件安装方法
如果安装插件失败率很高,可设置如下:
解决jenkins 插件下载过慢问题
推荐做法
jenkins插件清华大学镜像地址
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
1.进入jenkins系统管理
2.进入插件管理(Manage Plugins)——高级——升级站点
jenkins学习3-Jenkins插件下载速度慢、安装失败
修改update-center.json地址
在/home/jenkins目录找到文件 hudson.model.UpdateCenter.xml
先查看文件内容
[root@VM_0_2_centos jenkins]# cat hudson.model.UpdateCenter.xml
内容如下:
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>https://updates.jenkins.io/update-center.json</url>
</site>
用vi编辑文件,修改https://updates.jenkins.io/update-center.json为http://mirror.xmission.com/jenkins/updates/update-center.json修改之后:wq保存退出
修改default.json
上面的地址改了之后,插件下载还是会很慢,参考博客https://www.cnblogs.com/hellxz/p/jenkins_install_plugins_faster.html
cd 到updates目录,找到default.json文件
[root@VM_0_2_centos jenkins]# cd updates/
[root@VM_0_2_centos updates]# vi default.json
使用vi编辑文件,如下,替换所有插件下载的url
:1,$s/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g
替换连接测试url
:1,$s/http:\/\/www.google.com/https:\/\/www.baidu.com/g
进入vi先输入:然后再粘贴上边的:后边的命令,注意不要写两个冒号!
修改完成保存退出:wq
重启Jenkins,见证奇迹,妈妈再也不用担心插件安装不上了。
方案二:
或源改成清华源:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
将default.json https://updates.jenkins.io/download/plugins 替换成 https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins
将 http://www.google.com/ 替换成 https://www.baidu.com/
添加启动脚本
vi startup.sh
#!/bin/bash
port=80
echo "正在启动jenkins,端口$port"
sudo fuser -k -n tcp $port
nohup java -Dhudson.model.DirectoryBrowserSupport.CSP= -jar jenkins.war --httpPort=$port > log.log 2>&1 &
在CentOS / RHEL 7上找不到fuser命令
-bash: fuser: command not found
yum install psmisc
2.3.1 离线安装
手工下载(*.hpi): http://updates.jenkins-ci.org/download/plugins/
进入:系统管理 / 管理插件 / 高级,然后上传插件进行安装。
无需重启 Jenkins 插件即生效。
2.3.2 在线安装
进入:系统管理 / 管理插件 / 可选插件
查找并勾选所需插件,点击“直接安装”;
无需重启 Jenkins 插件即生效。如遇失败可重试或离线安装。
2.4 工具设置
进入:系统管理 / Global Tool Configuration
JDK 下不勾选“自动安装”,指定别名=JDK-1.8.0.111, JAVA_HOME=/usr/java/jdk1.8.0_111
Maven 下不勾选“自动安装”,指定别名=Maven-3.3.9, MAVEN_HOME=/opt/apache-maven-3.3.9
点击 Save 按钮。
重启 Jenkins 后生效:sudo systemctl restart jenkins
3 Maven(SVN) 项目接入
3.1 准备 SVN 源码
使用 alibaba 的 fastjson 来演示:
下载: https://github.com/alibaba/fastjson/archive/master.zip
SVN地址: svn://centos/repo1/fastjson
3.2 安装相关插件
- Subversion Plug-in ## 版本管理 SVN 的插件
- Git plugin ## 版本管理 GIT 的插件
- Maven Integration plugin ## 项目构建 Maven 的插件
- Gradle Plugin ## 项目构建 Gradle 的插件
无需重启 Jenkins 插件即生效。如遇失败可重试或离线安装。 - EnvInject 环境变量插件,可以自定义环境变量
3.3 新建构建项目
3.3.1 开始创建
主页:点击“新建”;
项目类型:输入项目名称 fastjson,类型选择“构建一个Maven项目”(如果没有此项可选,请检查插件“Maven Integration plugin”是否已安装);
3.3.2 源码管理
选择“Subversion”(如果没有此项可选,请检查插件“Subversion Plug-in”是否已安装),
仓库URL可以指定 svn/http/https 之一,这里指定 svn://centos/repo1/fastjson
Credentials: 添加 SVN 用户名密码,并从下拉列表中选择它。
3.3.3 定时触发构建
构建触发器: 只选中 Build periodically, “日程表”格式与 crontab 相似但有细微差别,示例如下:
## 每行由 5 个值组成(空格或TAB分隔),分别表示分(0-59)、时(0-23)、日(1-31)、月(1-12)、周(0-7, 0/7=周日)
## "M,N" 表示M和N;"M-N" 表示范围[M,N];"M-N/X" 表示范围[M,N]内每隔X;"*/X" 表示整个范围内每隔X
## 前面提到的M/N/X的值都可以用H(意为Hash)代替,散列值起到随机值的效果,且同一项目取值稳定,这对于项目多时分散压力很有用。
H/10 H(0-8) * * 1-5 ## 触发时间: 工作日、Hour为0~8按哈希随机、Minute以10为间隔
H/10 H * * 0,6,7 ## 触发时间: 周末、Hour为全天按哈希随机、Minute以10为间隔
## “日程表”修改后,下方会给出下次执行时间点的预告。
比如我想每天的9点13点20点10分定时部署,如下图设置
3.3.4 版本提交触发构建
构建触发器: 只选中 Poll SCM,可指定检查 SVN 代码是否有提交的时间:(svn路径最后添加@HEAD,可以防止jenkins获取代码延迟)
## 格式与 "Build periodically" 相同
H/10 * * * * ## 任何时候,每隔 30 分钟就检测一次 SVN,如果有提交就启动构建
3.3.5 Build 设置
Root POM: 指定 pom.xml 相对路径
Goals and options: 指定 mvn 执行目标或选项,设置为
clean package -Dmaven.test.skip=true
示例:
3.3.6 Post Steps 设置
定制构建后的操作,通常选择“Run only if build succeeds”,支持 shell 等脚本;
下面是常用的微服务的启动脚本:
## 脚本工作目录为: $WORKSPACE
#!/bin/sh
BUILD_ID=dontKillMe
#sh deploy/stopAll.sh
PORTS=("8017" "8088" "9080" "8021")
echo "all prot "${PORTS[@]}
for var in ${PORTS[@]}
do
PID=`netstat -anp|grep ${var}|awk '{printf $7}'|cut -d/ -f1`
echo "port:${var},pid:${PID}"
if [ ! -n "${PID}" ]; then
echo "NOT KILL"
else
echo "kill -9 ${PID}"
kill -9 ${PID}
fi
done
nohup java -server -Xmx256m -Xms256m -jar -Dspring.profiles.active=test company-web/target/company-web-1.0.0-SNAPSHOT.jar > /usr/local/log/company/company-web.log 2>&1 &
nohup java -server -Xmx256m -Xms256m -jar -Dspring.profiles.active=test company-service/target/company-service-1.0.0-SNAPSHOT.jar > /usr/local/log/company/company-service.log 2>&1 &
nohup java -server -Xmx256m -Xms256m -jar -Dspring.profiles.active=test company-alarm/target/company-alarm-1.0.0-SNAPSHOT.jar > /usr/local/log/company/company-alarm.log 2>&1 &
nohup java -server -Xmx256m -Xms256m -jar -Dspring.profiles.active=test company-scheduling/target/company-scheduling-1.0.0-SNAPSHOT.jar > /usr/local/log/company/company-scheduling.log 2>&1 &
#!/bin/sh
echo "开始结束进程"
jars=("api-gateway-0.0.1-SNAPSHOT.jar" "common-service-impl-0.0.1-SNAPSHOT.jar" "operate-application-0.0.1-SNAPSHOT.jar" "operate-service-impl-0.0.1-SNAPSHOT.jar" "portal-application-0.0.1-SNAPSHOT.jar" "portal-service-impl-0.0.1-SNAPSHOT.jar" "sso-service-0.0.1-SNAPSHOT.jar" "schedule-application-0.0.1-SNAPSHOT.jar" "portalwebsite-application-0.0.1-SNAPSHOT.jar" "sms-service-impl-0.0.1-SNAPSHOT.jar")
echo "all jar "${jars[@]}
for var in ${jars[@]}
do
pid=`ps -ef|grep ${var}|grep -v grep|awk '{print $2}'`
echo "jar:${var},pid:${pid}"
if [ -z "${pid}" ]; then
echo "${var} is not running"
else
kill -9 ${pid}
fi
done
启动脚本2:
cat > ./start.sh <<"EOF"
#!/bin/bash
APP_NAME="oc-platform.jar"
APP_PATH="oc-platform/target/"
usage() {
echo -e "使用前先编辑下,现在jar包路径是:${APP_PATH} \n使用命令Usage: sh capital-lease.sh [start|stop|restart|status]"
exit 1
}
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}'`
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
start(){
is_exist
if [ $? -eq 0 ]; then
echo "${APP_NAME} is already running. pid=${pid}"
else
nohup java -server -Xmx256m -Xms256m -DlogLevel=info -jar ${APP_PATH}${APP_NAME} > /home/logs/oc/oc.log 2>&1 &
fi
}
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
else
echo "${APP_NAME} is not running"
fi
}
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
}
restart(){
stop
sleep 5
start
}
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
EOF
附录:如果是node工程需要先声明一下npm的环境变量:
发送钉钉通知:
TESTURL="http://192.168.95.75:8060/"
DATE=${BUILD_TIMESTAMP// /-}
curl 'https://oapi.dingtalk.com/robot/send?access_token=48a4987d13aebc3d09b24783ffa11f8e03ce99579016e0c0020fdd8c5a787589' -H 'Content-Type: application/json' -d '{"actionCard":{"title":"智慧园区-wpop前端-JENKINS第'${BUILD_NUMBER}'次自动构建","text":"![screenshot](https://dss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2319834554,1372531032&fm=26&gp=0.jpg)\n# 智慧园区-wpop前端-第'${BUILD_NUMBER}'次自动构建\n- 构建时间:'${DATE}'\n- 测试地址:'${TESTURL}'\n- 本次更新内容:'${JOB_URL}''${BUILD_NUMBER}'/change\n- 构建日志:'${JOB_URL}''${BUILD_NUMBER}'/console","btnOrientation":"0","singleTitle":"构建结果","singleURL":"'${JOB_URL}''${BUILD_NUMBER}'"},"msgtype":"actionCard"}'
3.4 手工触发构建
进入 My Views, 右侧看到各个项目;
点击进入关注的项目,点击左侧的“立即构建”;
开始构建或构建完毕后,左下方列出每次构建的链接,点击进入某次构建;
点击左侧的“Console Output”,可查看构建日志,如有报错可以看到;
纠正错误后,返回到工程,再次点击“立即构建”,直至构建成功;
如有网络相关报错,重试几次也会成功。
4 开启 Java 代码静态检查
4.1 安装相关插件
如果是离线安装,需要先依次安装被依赖的插件:
- Script Security Plugin
- Matrix Project Plugin
- Static Analysis Utilities
再安装直接被使用的插件:
- FindBugs Plug-in
- Checkstyle Plug-in
- PMD Plug-in
插件官方资料:
FindBugs: https://wiki.jenkins-ci.org/display/JENKINS/FindBugs+Plugin
Checkstyle: http://maven.apache.org/plugins/maven-checkstyle-plugin/usage.html
PMD: http://maven.apache.org/plugins/maven-pmd-plugin/usage.html
4.2 Maven 中设置插件(pom.xml)
<project ...>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<!-- ...... -->
<reporting>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>3.0.4</version>
<configuration>
<xmlOutput>true</xmlOutput>
<findbugsXmlOutput>true</findbugsXmlOutput>
<findbugsXmlWithMessages>true</findbugsXmlWithMessages>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.17</version>
<configuration>
<linkXRef>false</linkXRef>
<failsOnError>true</failsOnError>
<consoleOutput>true</consoleOutput>
<configLocation>checkstyle.xml</configLocation>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.7</version>
<configuration>
<linkXref>false</linkXref>
</configuration>
</plugin>
</plugins>
</reporting>
</project>
4.3 修改 Jenkins 构建配置
4.3.1 设置 Maven
“Build”标签页,Goals and options 设置为:
package -Dmaven.test.skip=true findbugs:findbugs checkstyle:checkstyle pmd:pmd
4.3.2 开启相关报告
“构建设置”标签页,打开以下三个选项:
- Publish FindBugs analysis results
- Publish Checkstyle analysis results
- Publish PMD analysis results
4.4 构建后查看报告
构建后进入构建页面,从左边点击查看报告:
- FindBugs Warnings
- Checkstyle Warnings
- PMD Warnings
5 开启邮件报告
Jenkins 的邮件发送,原理与邮件客户端一样:把发件人的邮箱帐号、密码、SMTP服务器告诉 Jenkins,Jenkins 需要时使用该帐号向指定的收件人发送邮件报告。
5.1 安装相关插件
Jenkins 自带邮件插件(Mailer Plugin)的功能很弱且无法自定制,
需要安装扩展邮件插件: Email Extension Plugin
5.2 全局统一设置
5.2.1通过系统管理→系统设置,进行邮件配置:
5.2.2设置jenkins地址和管理员邮箱地址
5.2.3设置发件人等信息
PS:这里的发件人邮箱地址切记要和系统管理员邮件地址保持一致(当然,也可以设置专门的发件人邮箱,不过不影响使用,根据具体情况设置即可)
上图的默认收件人邮箱可以添加多人,中间用英文半角逗号隔开即可。
5.2.4配置邮件内容模版
自定义环境变量
附:邮箱内容模版(Default Content)(使用前要装两个插件,Build Timestamp Plugin,Jenkins插件之环境变量插件EnvInject):
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
<style type="text/css">
span {
/*右对齐*/
display: inline-block;
width: 200px;
font-weight: bolder;
}
</style>
<script>
window.onload = function () {
var result = document.getElementById("result");
if (result.innerText.indexOf("Successful") != -1) {
result.setAttribute("color", "#0B610B");
} else {
result.setAttribute("color", "red");
}
}
</script>
</head>
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0">
<table width="95%" cellpadding="0" cellspacing="0" style="font-family: monospace">
<tr>
<td><b>本邮件由系统自动发出,无需回复!</b><br/>各位同事,大家好,以下为${PROJECT_NAME }项目构建信息</br></td>
</tr>
<tr>
<td><br/>
<b><font color="#0B610B">构建信息</font></b>
<hr size="2" width="100%" align="center" />
</td>
</tr>
<tr>
<td>
<ul>
<li><span>构建结果:</span><font id="result">${BUILD_STATUS}</font></li>
<li><span>构建时间:</span>${ENV, var="BUILD_TIMESTAMP"}</li>
<li><span>项目名称:</span>${PROJECT_NAME}</li>
<li><span>构建编号:</span>第${BUILD_NUMBER}次构建</li>
<li><span>触发原因:</span>${CAUSE}</li>
<li><span>Jenkins构建日志:</span><a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
<li><span>Jenkins构建Url:</span><a href="${BUILD_URL}">${BUILD_URL}</a></li>
<li><span>Jenkins工作目录:</span><a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
<li><span>Jenkins部署url:</span><a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
<li><span>测试访问地址:</span><a href="${PROJECT_URL}">${ENV, var="TEST_URL"}</a></li>
</ul>
<h4><font color="#0B610B">失败用例</font></h4>
<hr size="2" width="100%" />
$FAILED_TESTS<br/>
<h4><font color="#0B610B">最近提交(#$SVN_REVISION)</font></h4>
<hr size="2" width="100%" />
<ul>
${CHANGES_SINCE_LAST_UNSTABLE, reverse=true, format="%c", changesFormat="<li>%d [%a] %m</li>"}
</ul>
详细提交: <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a><br/>
</td>
</tr>
</table>
</body>
</html>
5.2.5设置邮件触发机制
上面的几步完成后,点击应用,保存即可。
5.2.6配置Jenkins自带的邮件功能
配置内容如下,和Email Extension Plugin插件同样的配置,可以通过勾选通过发送测试邮件测试配置按钮来测试配置是否成功发送邮件,如下图:
完成上面的系统设置后,点击保存即可。
5.2.7项目配置
在完成系统设置后,还需要给需要构建的项目进行邮件配置。
5.2.8进入项目配置界面
进入新建的项目界面,点击配置按钮,进入系统配置页面:
5.2.9配置构建后操作模块
进入系统配置页面后,点击上方的构建后操作选项,配置内容如下:
进入构建后操作的模块,然后会看到下面的内容,具体的配置信息如图中标注:
接上图:
配置内容默认即可,邮件内容类型可以根据自己的配置选择,收件人列表可以从前面的系统设置中默认收件人选项配置。
5.2.10构建触发邮件测试
如下图,为我收到的测试邮件,邮件内容可以通过系统设置里面进行个性化的配置,可参考我上面的模板,或者自定义即可。
以上内容,即Jenkins配置自动发送邮件的方法,仅供参考。。。
6 Java/JUnit 单元测试
6.1 Maven 中设置插件(pom.xml)
<project ...>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
</plugin>
</plugins>
</reporting>
</project>
6.2 修改 Jenkins 构建配置
“Build”标签页,Goals and options:确保去掉-Dmaven.test.skip=true即可。
6.3 构建后查看单元测试报告
7 单元测试覆盖率报告
7.1 安装插件
JaCoCo plugin:与插件 Cobertura 一样,用于生成覆盖率报告,但比 Cobertura 更易用。
7.2 调整工程 pom.xml
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.8</version>
<executions>
<execution>
<id>prepare</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
7.3 调整项目的构建设置
项目的构建设置 Post Build Action 中,增加 “Record JaCoCo coverage report”,并设置期望的覆盖率阈值。
7.4 构建并查看报告
构建完成后,点击本次构建页的“Coverage Report”查看报告:
8 更多有用插件
- Folders Plugin:可嵌套地定义文件夹来级别 views / jobs;
- build timeout plugin:允许用户中止耗时太久的构建;
- Dingding[钉钉] Plugin:允许向阿里钉钉发送构建通知;
- TestNG Results Plugin: 用 TestNG 代替 JUnit;
- Publish Over SSH: 通过SSH发布文件或执行命令(使用SFTP的SCP)。
附录:jenkins环境变量的使用
Jenkins可用环境变量以及使用方法
在这之前,没有自己配置过Jenkins,都是照猫画虎,Copy原来已经配好的项目过来修修改改,一直想不明白比如BUILD_NUMBER之类的东西是哪来的(其实是没有找到官方说明),很纳闷,今天找到了,然后就详细写一遍,记录学习一下。
先说一下变量的使用方法
-
下面的环境变量可以在配置Jenkins Job的时候用得到,可以用在Execute shell、Execute Windows batch command、文本框 上加上编辑好的的shell脚本 Windows:%BUILD_NUMBER% %变量名% Linux:BUILD_NUMBER 或者 $BUILD_NUMBER
-
倘若是自己定义的参数化(Parameter)在调用时可以直接 用 endPoint
-
**在Maven或者Ant中使用(参考 Jenkins内置环境变量的使用 ** 和 Jenkins进阶){env.WORKSPACE}
Jenkins可用环境变量:
-
BRANCH_NAME
对于多分支项目,这将被设置为正在构建的分支的名称,例如,如果您希望从master部署到生产环境而不是从feature分支部署;如果对应某种更改请求,则该名称通常是任意的(请参阅下面的CHANGE_ID和CHANGE_TARGET); -
CHANGE_ID
对于与某种更改请求相对应的多分支项目,这将被设置为更改ID,例如拉取请求编号(如果支持);其他未设置; -
CHANGE_URL
对于与某种更改请求相对应的多分支项目,这将被设置为更改URL(如果支持);其他未设置; -
CHANGE_TITLE
对于与某种更改请求相对应的多分支项目,这将被设置为更改的标题(如果支持);其他未设置; -
CHANGE_AUTHOR
对于与某种更改请求相对应的多分支项目,这将被设置为建议更改的作者的用户名(如果支持);其他未设置; -
CHANGE_AUTHOR_DISPLAY_NAME
对于与某种更改请求相对应的多分支项目,这将被设置为建议更改的作者的人名(如果支持);其他未设置; -
CHANGE_AUTHOR_EMAIL
对于与某种更改请求相对应的多分支项目,这将被设置为建议更改的作者的Email地址(如果支持);其他未设置; -
CHANGE_TARGET
对于与某种更改请求相对应的多分支项目,这将被设置为合并到的目标或者基础分支(如果支持);其他未设置; -
BUILD_NUMBER 当前构建的编号,例如“4674”等
-
BUILD_ID
当前构建的版本ID,与构建的BUILD_NUMBER相同 -
BUILD_DISPLAY_NAME
当前版本的显示名称,默认为“# 4674”,即BUILD_NUMBER。 -
JOB_NAME
即此版本的项目名称,例如“foo”或“foo / bar”。 -
JOB_BASE_NAME
此构建的项目的短名称剥离文件夹路径,例如“bar / foo”的“foo”。 -
BUILD_TAG
“jenkins - {BUILD_NUMBER}”的字符串。 JOB_NAME中的所有正斜杠(/)都用破折号( - )替换。方便地放入资源文件,jar文件等,以便于识别。 -
EXECUTOR_NUMBER
唯一编号,用于标识执行此构建的当前执行程序(在同一台计算机的执行程序中)。这是您在“构建执行程序状态”中看到的数字,但数字从0开始,而不是从1开始。 -
NODE_NAME
如果构建在代理上,则代理的名称; 如果在主版本上运行,则为“MASTER”; -
NODE_LABELS
节点分配的空白分隔的标签列表。 -
WORKSPACE
作为工作空间分配给构建的目录的绝对路径。 -
JENKINS_HOME
Jenkins用于存储数据的主节点上分配的目录的绝对路径。 -
JENKINS_URL
Jenkins的完整URL,如http:// server:port / jenkins /(注意:仅在系统配置中设置Jenkins URL时可用) -
BUILD_URL
此版本的完整URL,例如http:// server:port / jenkins / job / foo / 15 /(必须设置Jenkins URL) -
JOB_URL
该作业的完整URL,例如http:// server:port / jenkins / job / foo /(必须设置Jenkins URL) -
GIT_COMMIT
The commit hash being checked out. -
GIT_PREVIOUS_COMMIT
The hash of the commit last built on this branch, if any. -
GIT_PREVIOUS_SUCCESSFUL_COMMIT
The hash of the commit last successfully built on this branch, if any. -
GIT_BRANCH
远程分支名称,如果有的话。 -
GIT_LOCAL_BRANCH
本地分支名称,如果有的话。 -
GIT_URL
远程git仓库的URL。如果有多个,将会是GIT_URL_1,GIT_URL_2等。 -
GIT_COMMITTER_NAME
配置的Git提交者名称(如果有的话)。 -
GIT_AUTHOR_NAME
配置的Git作者姓名(如果有的话)。 -
GIT_COMMITTER_EMAIL
配置的Git提交者电子邮件(如果有的话)。 -
GIT_AUTHOR_EMAIL
已配置的Git作者电子邮件(如果有)。 -
SVN_REVISION
当前工作区的Subversion版本号,例如“12345” -
SVN_URL
当前工作区的Subversion版本号,例如“12345”
jenkins下载:
war:https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/2.240/jenkins.war
1. 镜像1:清华镜像
2 .镜像2:http://mirrors.jenkins-ci.org/
3. 官方下载地址:https://jenkins.io/zh/download/
jenkins修改端口有两种方法:
一种:如果是用java命令启动的war包,使用:“java -jar jenkins.war --httpPort=8081”命令就可以修改端口了,这种方式是一次性的,一旦停止运行端口是没有变化的。
二种:如果是将jenkins作为服务安装到windows中,修改Jenkins安装目录下的jenkins.xml文件,将<arguments>元素中的httpPort的值8080改为其他值即可。
<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=80</arguments> 修改完成以后重启服务就可以了,这样修改以后端口改变就是永久的。
安装jdk和maven
jdk : 下载路径:https://repo.huaweicloud.com/java/jdk/
https://repo.huaweicloud.com/java/jdk/8u171-b11/jdk-8u171-linux-x64.tar.gz
配置环境变量:
export JAVA_HOME=/usr/local/java/jdk1.8
export CLASSPATH=${JAVA_HOME}/lib
export PATH=$PATH:${JAVA_HOME}/bin
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
export MAVEN_HOME=/usr/local/maven/apache-maven-3.6.3
export PATH=$PATH:${MAVEN_HOME}/bin
jenkins 下载插件失败,提示:
java.io.IOException: Downloaded file /app/jenkins_home/plugins/jacoco.jpi.tmp does not match expected SHA-1, expected 'CtK02wHdFOxTutqhUQzmue6uvpg=', actual 'YGO05utKyaaFzpGCgCE95GS0WsU='
at hudson.model.UpdateCenter.verifyChecksums(UpdateCenter.java:1783)
at hudson.model.UpdateCenter.access$1100(UpdateCenter.java:147)
at hudson.model.UpdateCenter$InstallationJob.replace(UpdateCenter.java:1934)
at hudson.model.UpdateCenter$UpdateCenterConfiguration.install(UpdateCenter.java:1178)
at hudson.model.UpdateCenter$DownloadJob._run(UpdateCenter.java:1653)
at hudson.model.UpdateCenter$InstallationJob._run(UpdateCenter.java:1848)
at hudson.model.UpdateCenter$DownloadJob.run(UpdateCenter.java:1624)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at hudson.remoting.AtmostOneThreadExecutor$Worker.run(AtmostOneThreadExecutor.java:110)
at java.lang.Thread.run(Thread.java:745)
1、修改 jenkins 数据目录中的hudson.model.UpdateCenter.xml值为:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
2、修改updates文件夹中的 default.json文件
替换文件中所有 http://updates.jenkins-ci.org/download 为 https://mirrors.tuna.tsinghua.edu.cn/jenkins
http://www.google.com 修改为
http://www.baidu.com
3、在浏览器中,http:localhost:8080/reload,这样可以重新载入配置。
或者使用http:localhost:8080/restart,重启一下Jenkins ,选择安装推荐插件, 秒速安装成功,简直超速!!
jenkins发送钉钉消息通知:
在构建后通知中,添加shell如下
TESTURL="http://192.168.95.75:8089/"
DATE=${BUILD_TIMESTAMP// /-}
curl 'https://oapi.dingtalk.com/robot/send?access_token=62ce53a7f490a4a10d864a3f39d9d1bd141cb08f163b1f43f7517e6dde94e77f' -H 'Content-Type: application/json' -d '{"actionCard":{"title":"资产管理后端JENKINS第'${BUILD_NUMBER}'次自动构建","text":"![screenshot](https://dss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2319834554,1372531032&fm=26&gp=0.jpg)\n#资产管理后端第'${BUILD_NUMBER}'次自动构建\n- 构建时间:'${DATE}'\n- 测试地址:'${TESTURL}'\n- 本次更新内容:'${JOB_URL}''${BUILD_NUMBER}'/change\n- 构建日志:'${JOB_URL}''${BUILD_NUMBER}'/console","btnOrientation":"0","singleTitle":"构建结果","singleURL":"'${JOB_URL}''${BUILD_NUMBER}'"},"msgtype":"actionCard"}'