条件: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