栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

一文学会jenkins pipline自动化构建

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

一文学会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文件

false

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


      org.jacoco
      jacoco-maven-plugin     
      0.8.6

   

     org.jacoco   
     jacoco-maven-plugin  
     0.8.6   
            
           target/coverage-reports/jacoco-unit.exec
           target/coverage-reports/jacoco-unit.exec
        
        
            
                     
              jacoco-initialize    
                             
                   prepare-agent                      
                    
          
           
                     
             jacoco-site              
                                 
            test           
                           
                report           
                    
             
      

③ 编写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指的是你在系统配置中配的钉钉机器人的id   

           type:'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' } }
  • 最后执行

最后: 可以在公众号:伤心的辣条 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!喜欢软件测试的小伙伴们,可以加入我们的测试技术交流扣扣群:914172719(里面有各种软件测试资源和技术讨论)


好文推荐

转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!

面试经:一线城市搬砖!又面软件测试岗,5000就知足了…

面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…

什么样的人适合从事软件测试工作?

那个准点下班的人,比我先升职了…

测试岗反复跳槽,跳着跳着就跳没了…

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/320288.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号