背景:
項目分為前端和后端,先前端發布和后端發布分別有兩條流水線: 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()結果為: