一文学会jenkins pipline自动化构建

每天进步一点点,关注我们哦,每天分享测试技术文章

码同学抖音 :小码哥聊软件测试

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

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

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文件

    <skipTests>false</skipTests>

    免费领取 码同学软件测试 课程笔记+超多学习资料+完整视频+最新面试题,可以转发文章 + 私信「码同学666」获取资料哦

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

    <dependency>      <groupId>org.jacoco</groupId>      <artifactId>jacoco-maven-plugin</artifactId>           <version>0.8.6</version></dependency>
    <plugin>        <groupId>org.jacoco</groupId>        <artifactId>jacoco-maven-plugin</artifactId>       <version>0.8.6</version>        <configuration>                  <destFile>target/coverage-reports/jacoco-unit.exec</destFile>           <dataFile>target/coverage-reports/jacoco-unit.exec</dataFile>      </configuration>        <executions>                  <execution>                         <id>jacoco-initialize</id>                  <goals>                                  <goal>prepare-agent</goal>                                    </goals>                </execution>              <execution>                        <id>jacoco-site</id>                                     <phase>test</phase>                        <goals>                              <goal>report</goal>                        </goals>                 </execution>         </executions></plugin>

    ③ 编写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                  '''             }      }}

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

    免费领取 码同学软件测试 课程笔记+超多学习资料+完整视频+最新面试题,可以转发文章 + 私信「码同学666」获取资料哦

  • 配置自动化任务allure插件的脚本生成如下:

  • 邮件的脚本生成如下:

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2022年2月28日
    下一篇 2022年2月28日

    相关推荐