jenkins 在pipeline 中触发其他job

背景:

项目分为前端和后端,先前端发布和后端发布分别有两条流水线: backend和frontend。

现需要新建一条流水线并发执行job,并运行api测试用例

流水线如下:

pipeline {
    
  agent {label "master"}
  
  stages {
    stage('部署'){  
      parallel {                   // 并发执行前端和后端发布
        stage('frontend') {
          steps{
            script{
            // 使用build调度前端job,并传参,将结果赋值给frontendBuild
              def frontendBuild=build(job: 'frontend', parameters: [gitParameter(name: 'Branch', value: '*/develop')])       
              println frontendBuild.getProjectName()
              println frontendBuild.getNumber()
              println frontendBuild.getBuildVariables()     // 
              println frontendBuild.buildVariables.image_tag
            }
          }
        }
        
        stage('backend') {
          steps{
             script{ 
              def backendBuild=build(job: 'backend', parameters: [gitParameter(name: 'Branch', value: '*/dev')])
              println backendBuild.getProjectName()
             }
          } 
        }
      }
    }
    
    // stage("测试") {
    //     steps {
    //       sh """echo ${JOB_NAME}"""
    //       sh """echo ${currentBuild.getBuildCauses}"""
    //     }
    // }
  }
  
  post{
      always{        
        script{
           // echo ${currentBuild.result}
           CAUSE = "${currentBuild.getBuildCauses()}"
           // sh """echo ${currentBuild.getBuildCauses()}"""
        }
      }
  }
}

这里有几点需要着重讲解 :

1、关于frontendBuild变量

     特别强调:     def backendBuild=build(job: 'backend', parameters: [gitParameter(name: 'Branch', value: '*/dev')]) 必须放在script内执行,不然会报错

     这里是将前端job执行的结果赋值,本质上是 RunWrapper 类,通过方法可以获取到frontend job的结果

    具体的方法参考:https://javadoc.jenkins.io/plugin/workflow-support/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapper.html

2、关于frontendBuild.getBuildVariables()

     这里我是想获取frontend job中变量的值,官方文档中给的方法是使用 RunWrapper.getBuildVariables()方法

   但是开始我一直获取到的都是空,于是查找了资料,https://stackoverflow.com/questions/39539613/return-parameters-results-from-a-jobtriggered-by-pipeline-back-to-the-same-pip/39621733 

  

   必须放到   script中使用  env.MYKEY=MYVALUE 进行变量赋值,否则放在environment{}是不会生效

  具体方法为:

#!/usr/bin/env groovy
def git_auth = ""
def git_url = ""

def profile = 'frontend'
def envir = "test"

pipeline { 
    agent {
        label 'master'
    }

    tools {
       nodejs 'nodejs-10.16.0'
    }
    
    parameters {
      gitParameter branch: '', branchFilter: '.*', defaultValue: '*/develop', description: '选择发布的分支', name: 'Branch', quickFilterEnabled: false, selectedValue: 'NONE', sortMode: 'NONE', tagFilter: '*', type: 'PT_BRANCH'  
     }
     
     
    stages {
      stage('拉取代码'){
        steps {                
          checkout([
           $class: 'GitSCM',
           branches: [[name: "${Branch}"]],
           doGenerateSubmoduleConfigurations: false,
           extensions: [], 
           submoduleCfg: [], 
           userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_url}"]]])
         }        
      }
      
      stage('编译前端代码'){
        steps{
            script {
             env.number = VersionNumber([versionNumberString: '${BUILD_DATE_FORMATTED, "yyyyMMdd"}-${BUILDS_TODAY}', worstResultForIncrement: 'SUCCESS'])
             env.image_tag = "R001.0.0.${profile}-SC-${envir}-${number}"
            }
          dir(env.WORKSPACE){
             sh """echo ${env.image_tag}"""
          }
        }
      }        
    }
    
}

 最终执行getBuildVariables()结果为:

原文地址:https://www.cnblogs.com/deny/p/15430246.html