01 Pipeline流水线基本语法

首先创建

在jenkins上创建一个pipeline的流水线任务

新建ITEM–>选择流水线

基本pipeline脚本结构

pipeline {//agent 表示要执行的节点,any表示任意节点agent any//stages表示任务执行时的所有步骤集合stages {//stage就表示一个步骤,括号里是步骤名称stage('拉取项目源码'){//每一个stage都可以定义自己执行的节点,如果没定义,则用最上方的agent {// label 后跟的是节点的标签名称label 'mall-server' }steps {echo '这是拉取代码这一步'echo "Running ${env.BUILD_ID} on ${env.JENKINS_URL} ${env.JOB_NAME}"echo "${currentBuild.result} sdsdd"sh 'pwd'//如果当前节点是windows,我想执行windows下的命令//bat 'dir' } }stage('静态代码扫描'){steps {echo '这是静态代码扫描'}}stage('单元测试'){steps {echo '执行jacoco单元测试'} }stage('打包依赖服务'){steps {echo '打包依赖服务'} }stage('打包当前服务'){steps {echo '打包当前服务'} }stage('部署环境'){steps {echo '部署环境'} }stage('接口自动化测试'){agent {label 'auto_test'}steps {echo '接口自动化测试'}}stage('ui自动化'){steps {echo 'ui自动化'} }}}

02 针对mall微服务项目编写pipeline脚本

对于pipeline脚本来说我们不用去记那么多的东西,可以打开自己的pipeline任务,点击流水线语法后,使用下面两个菜单帮我们生成部分脚本

对于一个项目来说可能具备多服务多环境的现象

所以我们要创建环境节点参数、服务名称参数

在pipeline脚本的最上方增加如下:

//定义了两组选项参数parameters { choice choices: ['mall-admin', 'mall-demo', 'mall-auth', 'mall-serach'], name:'servername'choice choices: ['mall-server', 'mall-dev', 'mall-prod'], name: 'node_env'}

配好后先执行一次任务

选择项目部署的节点

因为部署的节点环境根据上一步的参数来的,用户选什么我们就执行什么,所以label的值是一个变量

agent {label "${node_env}"}

拉取项目代码

拷贝生成的脚本,放在拉代码的阶段的steps下

stage('拉取项目源码'){steps { echo '这是拉取代码这一步' git credentialsId: '4c1003ef-ac70-4271-8649-1759e79d430a', url: 'http://192.168.0.109/shamo/mall-swarm-master.git' }}

单元测试覆盖率

由于mall这个项目原本没有集成jacoco相关的覆盖率统计,因此我们先对项目做些修改

① 修改整个项目最根的pom.xml文件

false

② 修改各个子模块服务的pom.xml

org.jacocojacoco-maven-plugin 0.8.6
 org.jacocojacoco-maven-plugin 0.8.6target/coverage-reports/jacoco-unit.exec target/coverage-reports/jacoco-unit.exec jacoco-initializeprepare-agentjacoco-sitetestreport  

③ 编写pipeline

复制生成的jacoco指令,填入相应的steps里

stage('单元测试'){ steps { echo '执行jacoco单元测试' sh ''' cd "${servername}" mvn test''' jacoco changeBuildStatus: true,maximumBranchCoverage: '100',maximumClassCoverage: '100',maximumComplexityCoverage: '100',maximumInstructionCoverage: '100',maximumLineCoverage: '100',maximumMethodCoverage: '100',minimumBranchCoverage: '90',minimumClassCoverage: '90',minimumComplexityCoverage: '90',minimumInstructionCoverage: '90',minimumLineCoverage: '90',minimumMethodCoverage: '90' }}

静态代码扫描

拷贝生成的到静态扫描的stage的steps里,再补充sonar扫描的指令

stage('静态代码扫描'){steps {echo '这是静态代码扫描' withSonarQubeEnv(credentialsId: '1d74c7e8-5b27-4772-9a21-41e17eb87b7d', installationName: 'sonar') {// 执行sonar扫描的指令 sh ''' cd "${servername}" mvn sonar:sonar \ -Dsonar.projectKey=${JOB_NAME}-${servername}$BUILD_NUMBER \ -Dsonar.projectName=mall \ -Dsonar.language=java \ -Dsonar.sourceEncoding=UTF-8 \ ''' }}}

打包并部署

stage('服务打包并部署'){steps {echo '打包依赖服务'//打包每个服务都依赖的模块sh 'mvn clean install -pl mall-common,mall-mbg -am'//打包我要部署的这个服务模块sh '''cd "${servername}"mvn clean package''' //执行部署脚本文件 sh '/mydata/sh/${servername}.sh'}}

钉钉通知

钉钉通知在每个阶段其实都可以加的,我们把他加载部署里

stage('服务打包并部署'){ steps {echo '打包依赖服务'//打包每个服务都依赖的模块sh 'mvn clean install -pl mall-common,mall-mbg -am'//打包我要部署的这个服务模块sh '''cd "${servername}"mvn clean package''' //执行部署脚本文件sh '/mydata/sh/${servername}.sh'//部署完成后钉钉通知项目组 dingtalk(robot:'dd001',//robot指的是你在系统配置中配的钉钉机器人的idtype:'MARKDOWN',atAll: false,title: "${servername} 部署成功",text: ["#### '${JOB_NAME}'项目扫描部署\n - 任务:第'${BUILD_NUMBER}'次\n - 状态:'${currentBuild.result}' \n - 执行人: '${user}' \n \n[查看控制台]('${BUILD_URL}')"])} }

配置自动化任务

allure插件的脚本生成如下:

邮件的脚本生成如下:

stage('接口自动化测试'){ //如果之前的步骤执行时失败了改动了当前任务的结果,那么自动化测试没有必要执行 //下面的判断指的是没结果时或者结果是成功时 when {expression { currentBuild.result==null||currentBuild.result == 'SUCCESS' } }//使用自动化执行的节点agent { label 'auto_test' }steps {echo '接口自动化测试'//拉取自动化脚本git credentialsId:'4c1003efac70-4271-8649-1759e79d430a', url: 'http://192.168.0.109/shamo/mallapitest1.git'//执行自动化测试,由于这个节点是windows的,所以采用bat xxx来执行命令操作bat 'python run.py' //生成测试报告allure includeProperties: false, jdk: '', results: [[path: 'report/shop']]//发送结果邮件emailext body: ''' $PROJECT_NAME-第$BUILD_NUMBER次构建日志 

构建信息

  • 项目名称 :$PROJECT_NAME

  • 详细测试日志 :${BUILD_URL}console

  • 详细测试报告 :${JOB_URL}${$BUILD_NUMBER}/allure

  • 触发原因:${CAUSE}

  • 项目Url :$BUILD_URL

''',subject: '$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!',to: '2879897713@qq.com'}}

最后执行

中文在线文档:https://www.jenkins.io/zh/doc/book/pipeline/

还有一个:https://www.w3cschool.cn/jenkins/jenkins-qc8a28op.html


资源分享

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】