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()結果為:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM