背景:
项目分为前端和后端,先前端发布和后端发布分别有两条流水线: 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()结果为: