美文网首页
jenkins任务并行+串行,都执行通过后执行最后job

jenkins任务并行+串行,都执行通过后执行最后job

作者: D_w | 来源:发表于2022-10-27 19:23 被阅读0次

任务背景:想要实现如此流程:开发提交代码后触发CI,开发的CIjob会触发自动化测试环境升级job并传入参数,当前有两套自动化测试环境(all-in-one和splite),想要实现两套自动化环境升级完毕后跑对应的自动化脚本,当两套环境的自动化脚本都跑过时进行手工测试环境升级操作。

实现方案:

流程图

介绍下每个job的功能:

  • 首先需要一个pipline流水线总体调控,接受并传递CIjob中的参数,该job取名enter job,
  • jobA和jobB是两套不同的自动化测试环境升级job
  • jobC和jobD是两套自动化测试环境的测试脚本执行job
  • jobE是手工测试环境升级job

jobA实现方式

这里是定义上游job传入并传入下游的使用参数


image.png

下面是pipline的脚本,stages中使用了parallel,parallel中的stage可以并行执行,jobE的执行放在post的success中是为了只有在jobA和jobB以及后续job都执行成功后才执行最终的jobE,若有一个不成功就不执行jobE

pipeline {
    agent any
    environment {  
        CC = 'clang'
    }
    stages {
        stage('并行执行orch_update_deploysmoke和orch_update_splitsmoke'){
            parallel {
                stage('run orch_update_deploysmoke') {
                    steps {
                        script { 
                            println "Here we kickoff run B1_orch_update_deploysmoke" 
                            println "${params.RF_version}"
                            jobB = build job: 'B1_orch_update_deploysmoke', parameters: [
                               // [$class: 'BooleanParameterValue', name: 'runsmoketest',value: "${params.runsmoketest}"],
                                [$class: 'StringParameterValue', name: 'Run_Smoke',value: "${params.Run_Smoke}"],
                                [$class: 'StringParameterValue', name: 'RF_version',value: "${params.RF_version}"],
                                [$class: 'StringParameterValue', name: 'EntireMessage',value: "${params.EntireMessage}"],
                                [$class: 'StringParameterValue', name: 'frontend_Author',value: "${params.frontend_Author}"],
                                [$class: 'StringParameterValue', name: 'frontend_releaseInfo',value: "${params.frontend_releaseInfo}"],
                                [$class: 'StringParameterValue', name: 'Backend_Author',value: "${params.Backend_Author}"],
                                [$class: 'StringParameterValue', name: 'backend_releaseinfo',value: "${params.backend_releaseinfo}"],
                                [$class: 'StringParameterValue', name: 'Issues',value: "${params.Issues}"]
                            ]
                            println jobB.getResult() 
                        } 
                    }
                }
                stage('run orch_update_splitsmoke') {
                    steps {
                        script { 
                            println "Here we kickoff run B2_orch_update_splitsmoke" 
                            jobB = build job: 'B2_orch_update_splitsmoke', parameters: [
                               // [$class: 'BooleanParameterValue', name: 'runsmoketest',value: "${params.runsmoketest}"],
                                [$class: 'StringParameterValue', name: 'Run_Smoke',value: "${params.Run_Smoke}"],
                                [$class: 'StringParameterValue', name: 'RF_version',value: "${params.RF_version}"],
                                [$class: 'StringParameterValue', name: 'EntireMessage',value: "${params.EntireMessage}"],
                                [$class: 'StringParameterValue', name: 'frontend_Author',value: "${params.frontend_Author}"],
                                [$class: 'StringParameterValue', name: 'frontend_releaseInfo',value: "${params.frontend_releaseInfo}"],
                                [$class: 'StringParameterValue', name: 'Backend_Author',value: "${params.Backend_Author}"],
                                [$class: 'StringParameterValue', name: 'backend_releaseinfo',value: "${params.backend_releaseinfo}"],
                                [$class: 'StringParameterValue', name: 'Issues',value: "${params.Issues}"]
                                ]
                            println jobB.getResult() 
                        } 
                    }
                }
            }
        }
    }
    post{
        success('run D_orch_update_test') {
            script { 
                jobF = build job: 'D_orch_update_test', parameters: [
                               // [$class: 'BooleanParameterValue', name: 'runsmoketest',value: "${params.runsmoketest}"],
                                [$class: 'StringParameterValue', name: 'Run_Smoke',value: "${params.Run_Smoke}"],
                                [$class: 'StringParameterValue', name: 'RF_version',value: "${params.RF_version}"],
                                [$class: 'StringParameterValue', name: 'EntireMessage',value: "${params.EntireMessage}"],
                                [$class: 'StringParameterValue', name: 'frontend_Author',value: "${params.frontend_Author}"],
                                [$class: 'StringParameterValue', name: 'frontend_releaseInfo',value: "${params.frontend_releaseInfo}"],
                                [$class: 'StringParameterValue', name: 'Backend_Author',value: "${params.Backend_Author}"],
                                [$class: 'StringParameterValue', name: 'backend_releaseinfo',value: "${params.backend_releaseinfo}"],
                                [$class: 'StringParameterValue', name: 'Issues',value: "${params.Issues}"]
                       ]
                println jobF.getResult()
            }
        }
    }
}

jobA/jobB实现方式

在jobA/jobB中也先定义上游传入和用到的参数


image.png

在构建步骤中先执行升级操作


image.png
在这一步选择有条件的执行,只有当上游传入的Run_Smoke参数为yes时执行下面的测试jobC/jobD
image.png

这里是关键,需要勾选上Block until the triggered projects finish their builds,这样就可以在jobC/D测试没通过报错时能够让触发他们的jobA/B也报错,从而enter_job就不执行JobE


image.png

jobC/jobD实现方式

在jobC/jobD中也先定义上游传入和用到的参数和上面一样,构建中放入执行测试任务的命令


image.png

JobE实现方式

同上,jobE只需要配置升级手工测试环境的命令即可

实现效果

成功时,这里run orch_update_deploysmoke是执行jobA和jobC的总时间


image.png

这里JobD测试失败,部署手工测试环境的jobE就不执行了


image.png

相关文章

  • jenkins任务并行+串行,都执行通过后执行最后job

    任务背景:想要实现如此流程:开发提交代码后触发CI,开发的CIjob会触发自动化测试环境升级job并传入参数,当前...

  • 关于串并行

    串行执行任务队列items 并行执行任务队列items 串行与并行的结合,即每次设定最多能并行n个异步任务

  • NSOperation

    1.简单了解 先来了解一下串行和并行 串行和并行描述的是任务和任务之间的执行方式 串行是任务A执行完了任务B才执行...

  • iOS 多线程-CGD

    串行队列同步执行,不开启新线程,任务按顺序执行 串行队列异步执行,会开启新线程(1个),任务按照顺序执行 并行队列...

  • 关于多线程GCD 串行/并行、同步/异步

    一、GCD串行/并行队列创建 串行队列: 并行队列: 二、GCD串行/并行队列同步/异步执行 执行内容1: 执行结...

  • iOSIN-GCD

    队列和同步异步 区别并行队列串行队列主队列同步(sync)没有开启新线程,串行执行任务没有开启新线程,串行执行任务...

  • 多线程 并没有那么难

    串行并行的定义 串行:一个线程中执行多个任务,只能一个一个的按照顺序执行这些任务。并行:一个进程中可以开启多条线程...

  • Python_线程详解

    并行:任务数<=CPU数,多核CPU同时执行多个任务 并发:任务书>=CPU数,单核CPU串行执行多个任务,只是切...

  • iOS多线程同步异步、串行并发的个人剖析(GCD)

    先来说一个队列和任务: 队列分为串行和并行 任务的执行分为同步和异步 这两两组合就成为了串行队列同步执行,串行队列...

  • iOS多线程同步异步、串行并发的剖析

    先来说一个队列和任务: 队列分为串行和并行 任务的执行分为同步和异步 这两两组合就成为了串行队列同步执行,串行队列...

网友评论

      本文标题:jenkins任务并行+串行,都执行通过后执行最后job

      本文链接:https://www.haomeiwen.com/subject/ebuazrtx.html