• 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()结果为:

  • 相关阅读:
    值类型、引用类型作为方法参数如何执行,ref与out的区别
    asp.net 常用 验证正则表达式
    ASP.NET的错误处理机制
    MSSQL与MYSQL区别
    http协议状态码对照表
    EF 跨数据库支持
    请求管道中的19个事件
    一位软件工程师的6年总结本人读了深受启发,献给所有从事IT开发的人 [转载]
    Windows 窗体的.Net 框架绘图技术
    Windows Live Messenger 8.5 去广告方法及资源文件
  • 原文地址:https://www.cnblogs.com/deny/p/15430246.html
Copyright © 2020-2023  润新知