百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

一文学会jenkins pipline自动化构建

yuyutoo 2025-03-20 20:53 9 浏览 0 评论

中文在线文档: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次构建日志      

                 

          

           

           

构建信息

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


  • 最后执行

相关推荐

《保卫萝卜2》安卓版大更新 壕礼助阵世界杯

《保卫萝卜2:极地冒险》本周不仅迎来了安卓版本的重大更新,同时将于7月4日本周五,带来“保卫萝卜2”安卓版本世界杯主题活动的火热开启,游戏更新与活动两不误。一定有玩家会问,激萌塔防到底进行了哪些更新?...

儿童手工折纸:胡萝卜,和孩子一起边玩边学carrot

1、准备两张正方形纸,一橙一绿,对折出折痕。2、橙色沿其中一条对角线如图折两三角形。3、把上面三角折平,如图。4、绿色纸折成三角形。5、再折成更小的三角形。6、再折三分之一如图。7、打开折纸,压平中间...

《饥荒》食物代码有哪些(饥荒最新版代码总汇食物篇)

饥荒游戏中,玩家们需要获取各种素材与食物,进行生存。玩家们在游戏中,进入游戏后按“~”键调出控制台使用代码,可以直接获得素材。比如胡萝卜的代码是carrot,玉米的代码是corn,南瓜的代码是pump...

Skyscanner:帮你找到最便宜机票 订票不求人

你喜欢旅行吗?在合适的时间、合适的目的地,来一场说走就走的旅行?机票就是关键!Skyscanner这款免费的手机应用,在几秒钟内比较全球600多家航空公司的航班安排、价格和时刻表,帮你节省金钱和时间。...

小猪佩奇第二季50(小猪佩奇第二季英文版免费观看)

Sleepover过夜Itisnighttime.现在是晚上。...

我在民政局工作的那些事儿(二)(我在民政局上班)

时间到了1997年的秋天,经过一年多的学习和实践,我在处理结婚和离婚的事情更加的娴熟,也获得了领导的器重,所以我在处理平时的工作时也能得心应手。这一天我正在离婚处和同事闲聊,因为离婚处几天也遇不到人,...

夏天来了就你还没瘦?教你不节食13天瘦10斤的哥本哈根减肥法……

好看的人都关注江苏气象啦夏天很快就要来了你是否和苏苏一样身上的肉肉还没做好准备?真是一个悲伤的故事……下面这个哥本哈根减肥法苏苏的同事亲测有效不节食不运动不反弹大家快来一起试试看吧~DAY1...

Pursuing global modernization for peaceful development, mutually beneficial cooperation, prosperity for all

AlocalworkeroperatesequipmentintheChina-EgyptTEDASuezEconomicandTradeCooperationZonei...

Centuries-old tea road regains glory as Belt and Road cooperation deepens

FUZHOU/ST.PETERSBURG,Oct.2(Xinhua)--NestledinthepicturesqueWuyiMountainsinsoutheastChi...

15 THE NUTCRACKERS OF NUTCRACKER LODGE (CONTINUED)胡桃夹子小屋里的胡桃夹子(续篇)

...

AI模型部署:Triton Inference Server模型部署框架简介和快速实践

关键词:...

Ftrace function graph简介(flat function)

引言由于android开发的需要与systrace的普及,现在大家在进行性能与功耗分析时候,经常会用到systrace跟pefetto.而systrace就是基于内核的eventtracing来实...

JAVA历史版本(java各版本)

JAVA发展1.1996年1月23日JDK1.0Java虚拟机SunClassicVM,Applet,AWT2.1997年2月19日JDK1.1JAR文件格式,JDBC,JavaBea...

java 进化史1(java的进阶之路)

java从1996年1月第一个版本诞生,到2022年3月最新的java18,已经经历了27年,整整18个大的版本。很久之前有人就说java要被淘汰,但是java活到现在依然坚挺,不知道java还能活...

学习java第二天(java学完后能做什么)

#java知识#...

取消回复欢迎 发表评论: