Jenkins配置单元测试(pipeline+Allure)

条件:Jenkins安装pipeline插件和Allure插件

1、基础pipeline脚本

  拉取代码=》执行clean操作=》执行单元测试=》执行打包部署=》执行其他

(1)图示

jenkins执行阶段视图
gitlab中单元测试的对应结果

jenkins单元测试报告的入口单元测试报告展示

(2)脚本

pipeline脚本 
pipeline {
 2     agent any  //在可用的节点运行
 3     environment {
 4         //git配置
 5         git_url = 'http://gitlab.***' //git的url地址
 6         git_key = 'XXXXX-XXXX-XXX' //git的访问key--流水线语法生成
 7         git_branch = 'release' //git的branch分支
 8     }
 9     stages{
10         //拉取git代码
11         stage('GetCode'){
12             steps{
13                 echo "get source codes from git"
14                 git branch: env.git_branch, credentialsId: env.git_key, url: env.git_url
15            }
16        }
17        //执行mvn clean
18        stage('Clean'){
19             steps{
20                 echo "Execute Clean"
21                 withMaven(jdk: 'jdk_1.8', maven: 'maven3') {
22                     sh "mvn clean"
23                 }
24             }
25         }
26         //执行单元测试
27         stage('UnitTest'){
28             steps{
29                 echo "Execute unittest"
30                 withMaven(jdk: 'jdk_1.8', maven: 'maven3') {
31                     sh "mvn test"
32                 }
33  
34             }
35             //执行单元测试后的处理
36             post
37             {
38                 always{
39                     //生成单元测试结果
40                     junit 'target/surefire-reports/*.xml'
41                              
42                     //生成allure报告
43                     allure includeProperties: false, jdk: '', results: [[path: 'target/allure-results']]
44                 }
45                 success {//成功时,发送success状态给gitlab
46                     updateGitlabCommitStatus name:'jenkins-unittest',state:'success'
47                 }
48                 failure {//失败时,发送failed状态给gitlab
49                     updateGitlabCommitStatus name:'jenkins-unittest',state:'failed'
50                 }
51             }
52         }
53         //执行打包部署
54         stage('Make Package'){
55             steps{
56                 echo "Execute deploy"
57                 withMaven(jdk: 'jdk_1.8', maven: 'maven3') {
58                     sh "mvn package -Dmaven.test.skip=true -Ptest"
59                 }
60  
61             }
62         }
63         //部署前
64         stage('before_Deploy'){
65             steps{
66                 echo "部署前处理"
67                 //todo 使用“流水线语法”转换处理内容(例如ssh处理等等)
68             }
69         }
70         
71         //部署
72         stage('Deploy'){
73             steps{
74                 echo "部署处理"
75                 //todo 使用“流水线语法”转换处理内容(例如ssh处理等等)
76             }
77         }
78     }
79     options{
80         gitLabConnection('gitlab')
81     }
82      
83 }
2、包含邮件发送的pipeline(可选择)

(1)图示

(2)脚本

邮件配置 
pipeline {
    agent any  //在可用的节点运行
    environment {
        to_list = 'zhangsan@wifi.com' //收件人,多人时用'逗号'分隔
    }
    stages{
    }
    post{
        failure {//失败时
            script{
                //判断是否要发邮件
                if (failure_isSendmail=='true'){
                    emailext subject: '$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!('+ env.git_branch+' branch)',
                        body:
                        '''<!DOCTYPE html>   
                        <html>   
                        <head>   
                        <meta charset="UTF-8">   
                        <title>${ENV, var="JOB_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>   
                                    本邮件由系统自动发出,无需回复!<br/>           
                                    各位同事,大家好,以下为${PROJECT_NAME }项目构建信息</br>
                                    <td><font color="#CC0000">构建结果 - ${BUILD_STATUS}</font></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>构建状态: ${BUILD_STATUS}</li>   
                                            <li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>   
                                            <li>项目  Url: <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>   
                                        </ul>   
         
                        <h4><font color="#0B610B">单元测试结果(total:${TEST_COUNTS,var="total"},pass:${TEST_COUNTS,var="pass"},fail:<font color="#FF0000">${TEST_COUNTS,var="fail"}</font>)</font></h4>
                        <hr size="2" width="100%" />
                        <font color="#FF00FF">测试报告:</font> <a href="${BUILD_URL}allure">${BUILD_URL}allure</a>
                        <br/> <br/>
         
                        <h4><font color="#0B610B">最近提交</font></h4>
                        <hr size="2" width="100%" />
                        <ul>
                        ${CHANGES_SINCE_LAST_SUCCESS, 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>''', 
                        to: env.to_list
                }
            }
        }
    }
}

3、其他说明及注意点

(1)Git拉取代码时使用的key,需要通过通过"流水线语法"页面获取,如下图。

(2)pipeline一旦有一步执行出错,后续步骤会终止

(3)由于代码中有前端代码,需要做一些处理(只需执行一次),否则会导致打包错误(具体错误未截获)

  • 找到项目所在的工作区(比如:/usr/local/tomcat-9.0.20/webapps/jenkins/workspace/project_new)
  • 在“/src/main/webclient”目录下,执行以下代码:

          npm install -g cnpm --registry= https://registry.npm.taobao.org

          cnpm install

三十六般武艺,七十二般变化,修练出个人品牌并发出光芒
原文地址:https://www.cnblogs.com/deeptester-vv/p/14777422.html