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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM