ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

jenkins实现并发任务执行

2020-09-11 21:01:14  阅读:634  来源: 互联网

标签:script admin res sh 并发 任务 ansible jenkins stage


jenkins并发编排

     jenkins并发工作流编排有利于提高执行效率 缩短构建时间

    设置不同stage段并发执行

#!groovy

@Library("myjenkinslib@master") _ 

def mytools = new org.tools()

pipeline {
   agent any
   
   stages {
      stage("Deploy Service"){
        steps {   
            sh "ansible webservers2  --user=admin -m copy -a 'src=${srcPath}/admin/target/admin-prod.jar dest=/app/chuangfa/taishi/app/admin/'"
            }
      }
      
    stage('start backen and front') {
     parallel {
     stage("Start backend"){
        steps {
         script {
           res = sh(script: "ansible webservers2 --user=admin -m shell -a 'sudo supervisorctl restart admin'", returnStatus: true)
           if(res != 0){
                error("admin服务启动失败,本次发布流程终止")
           }
          }
         }
              
        post {
             success {
                print("所有应用启动成功,本次后台流水线执行成功")
              }
        }
    }
    
    stage("Start front"){
        steps {
             script {
              res = sh(script: "ansible webservers2 --user=admin -m shell -a 'sudo supervisorctl restart sdces'", returnStatus: true)
              if(res != 0){
              error("sdces服务启动失败,本次发布流程终止")
             }
            }
              
        }
        post {
             success {
                print("所有应用启动成功,本次后台流水线执行成功")
              }
        }
    }
   }
  }
  }
}
pipeline

   同一个stage段内并发执行

   stage('start service') {
        steps {
          parallel(
              a:{ 
                script {
                 res = sh(script: "ansible webservers2 --user=admin -m shell -a 'sudo supervisorctl restart admin'", returnStatus: true)
                 if(res != 0){
                  error("admin服务启动失败,本次发布流程终止")
                 }
               }
               },
              b:{ 
                  script {
                    res = sh(script: "ansible webservers2 --user=admin -m shell -a 'sudo supervisorctl restart sdccollect'", returnStatus: true)
                     if(res != 0){
                        error("sdccollectconfig服务启动失败,本次发布流程终止")
                     }
                   }
               },
              c:{ 
                 script {
                    res = sh(script: "ansible webservers2 --user=admin -m shell -a 'sudo supervisorctl restart sdcrule'", returnStatus: true)
                    if(res != 0){
                    error("sdc-rule-config服务启动失败,本次发布流程终止")
                   }
                  }  
               },
              d:{ 
                 script {
                  res = sh(script: "ansible webservers2 --user=admin -m shell -a 'sudo supervisorctl restart sdces'", returnStatus: true)
                  if(res != 0){
                     error("sdces服务启动失败,本次发布流程终止")
                 }
                 }
               }
          )
        
        }
        post {
             success {
                print("所有应用启动成功,本次后台流水线执行成功")
              }
        }
    
  }
pipeline

  parallel不能嵌套parallel

       

 并发执行效率提升效果

 jenkins超时返回结果

      timeout(时间设置,默认是分钟为单位) {
          // 需要监控的代码执行
       }

       options { timeout(time: 1, unit: 'HOURS') }

      使用try catch

      

pipeline {
    agent any
   
    options {
        timeout(time: 5)
    }
    
   environment {
    destPath="C:/PythonScriptTest"
   }

   stages {
   
      stage('GetCode'){
         steps {
            // Get some code from a GitHub repository
            git credentialsId: 'yxhgitlab', url: 'https://192.168.30.3331:8090/hfm/automation.git'

            // To run Maven on a Windows agent, use
            // bat "mvn -Dmaven.test.failure.ignore=true clean package"
         }

         post {
            // If Maven was able to run the tests, even if some of the test
            // failed, record the test results and archive the jar file.
            success {
              print("getCode success")
            }
         }
      }
      
      stage("Deploy"){
           steps {
              script {
                 print("Deploy success......")
                 sh "sudo ansible windows -m win_copy -a 'src=/var/lib/jenkins/workspace/pipeline-test1/ dest=${destPath}/'"
              }
           }
           post {
              success {
                print("Deploy success......")
              }
           }
      }
      
      stage("Start"){
         steps {
            script {
               try {
                   
                     timeout(2) {
                       sh "sudo ansible windows -m win_command -a 'chdir=${destPath}/Web  python runall.py'"
                     }
               }
               catch (exc) {
                 print("runall.py已被成功启动,稍后会自动生成测试报告!")
               }
              }
           }
        }
    }
}
pipeline

  即使发生timeout异常 但是由于使用try语句 pipeline一样返回成功

标签:script,admin,res,sh,并发,任务,ansible,jenkins,stage
来源: https://www.cnblogs.com/yxh168/p/13639885.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有