一 前提条件
首先需要在jenkins中安装jacoco插件
在Manage plugins配置项里面搜索jacoco,安装JaCoCo code coverage reports 插件
在maven的pom文件中加入插件
maven的这个插件会在target下生成测试报告
注意:java的单元测试注解必须是org.junit.Test,否则将生成不了报告,maven识别不了
最后配置流水线
pipeline {
agent any
tools {
jdk 'jdk1.8'
}
stages {
stage('Checkout'){
steps{
echo "starting fetchCode from ${params.repoUrl}......"
// Get some code from a GitHub repository
// git branch: '${GIT_BRANCH}', credentialsId:'d82aaf65-3389-4c65-aa6f-1e98be7c31a4', url: '${GIT_URL}'
}
}
stage('单元测试') {
steps {
echo "starting unitTest......"
//注入jacoco插件配置,clean test执行单元测试代码. All tests should pass.
bat "mvn org.jacoco:jacoco-maven-plugin:prepare-agent -f ${pomPath} clean test -Dautoconfig.skip=true -Dmaven.test.skip=false -Dmaven.test.failure.ignore=true"
junit '**/target/surefire-reports/*.xml'
//配置单元测试覆盖率要求,未达到要求pipeline将会fail,code coverage.LineCoverage>20%.
jacoco changeBuildStatus: true, maximumLineCoverage:"20"
}
}
stage('部署测试环境') {
steps {
echo "starting buiding......"
//编译和打包
bat "mvn -f ${pomPath} clean package -Dautoconfig.skip=true -Dmaven.test.skip=true"
echo "end of building ......"
}
}
}
}
脚本中的一些参数是在流水线的参数中配置好的,可以参考之前的文章。
实际应用中,我们可能会吧脚本在程序后端动态生成,这样就可以动态的控制流水线了,
这需要通过http远程加载脚本
需要在jenkins安装插件,Http Request Plugin
安装后在具体的pipeline的jenkinsfile中写入
node{
def response = httpRequest contentType:'APPLICATION_JSON',
httpMode:"GET",
url:"http://localhost:9001/jenkins/project/getScript?jobName=allen-jenkins",
outputFile: "Jenkinsfile"
println "Write jenkins file done"
load "Jenkinsfile"
}
这个就是从远端加载脚本并执行,
远端返回的就是一个字符串
pipeline {
agent any
tools {
jdk 'jdk1.8'
}
stages {
stage('Checkout'){
steps{
echo "starting fetchCode from ${params.repoUrl}......"
// Get some code from a GitHub repository
// git branch: 'master', credentialsId:'d82aaf65-3389-4c65-aa6f-1e98be7c31a4', url: 'https://git.synnex.org/scm/onetool/monitortool.git'
}
}
stage('单元测试') {
steps {
echo"work place is ${WORKSPACE}"
echo "starting unitTest......"
//注入jacoco插件配置,clean test执行单元测试代码. All tests should pass.
bat "mvn org.jacoco:jacoco-maven-plugin:prepare-agent -f jddl-app-server/pom.xml clean test -Dautoconfig.skip=true -Dmaven.test.skip=false -Dmaven.test.failure.ignore=true"
junit '**/target/surefire-reports/*.xml'
//配置单元测试覆盖率要求,未达到要求pipeline将会fail,code coverage.LineCoverage>20%.
jacoco changeBuildStatus: true, maximumLineCoverage:"20"
echo "jar path is ${WORKSPACE}/target/"
}
}
}
}
中间将一些参数进行了替换:
遇到的问题:
有时候通过远程加载脚本和直接运行脚本,他们的WORKPLACE可能不一样,这样容易导致mvn构建的时候找不到pom文件,这个问题当我们在脚本中加入重新拉去代码的逻辑后,又正常了