2017-07-28 88 views
1

在声明式Jenkins管道中,我需要启动作业B,获取其build_number,以便稍后可以调用另一个作业来引用该特定构建的工件。如何获取声明式管道中下游作业的build_number?

Return parameters/results from a job(triggered by pipeline) back to the same pipeline看起来会在旧版groovy Jenkinsfiles中工作,但新的声明性语法不允许我根据“构建作业”步骤定义变量。

stage ('Provision system testbed') { 
     steps { 
      build job: 'Build_Testbed', parameters: [ 
       string(name: 'TOPOLOGY', value: 'flat') 
      ] 
      **// How to we get the build_number from above?** 
     } 
    } 

    stage ('System tests') { 
     steps { 
      sh """ 
       bundle exec rake spec:system || true 
      """ 

      step([$class: 'JUnitResultArchiver', testResults: 'results/*.xml']) 
     } 
    } 

    stage ('Destroy system testbed') { 
     steps { 
      build job: 'Destroy_Testbed', parameters: [ 
       string(name: 'BUILD_SELECTOR', value: '<SpecificBuildSelector plugin="[email protected]"> <buildNumber>**714**</buildNumber></SpecificBuildSelector>') 
      ] 
     } 
    } 

当然,我愿意完全替代解决方案,也


解决方案:

stage ('Provision system testbed') { 
     steps { 
      script { 
       def setupResult = build job: 'Build_Testbed', parameters: [ 
        string(name: 'TOPOLOGY', value: 'flat') 
       ] 
       def systest_build_number = setupResult.getNumber() 
       // Navigate to jenkins > Manage jenkins > In-process Script Approval 
       // staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods putAt java.lang.Object java.lang.String java.lang.Object 
       env['setup_build_number'] = setupResult.getNumber() 
      } 
     } 
    } 

    stage ('System tests') { 
     steps { 
      sh """ 
       bundle exec rake spec:system || true 
      """ 

      step([$class: 'JUnitResultArchiver', testResults: 'results/*.xml']) 
     } 
    } 

    stage ('Destroy system testbed') { 
     steps { 
      build job: 'Destroy_Testbed', parameters: [ 
       string(name: 'BUILD_SELECTOR', value: '<SpecificBuildSelector plugin="[email protected]"> <buildNumber>${env.setup_build_number}</buildNumber></SpecificBuildSelector>') 
      ] 
     } 
    } 

注:需要脚本的批准,我的詹金斯在服务器Jenkins>管理jenkins>进程内脚本批准

staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods putAt java.lang.Object java.lang.String java.lang.Object 

回答

1

看起来像它会在较旧的常规Jenkinsfiles

工作,你可以使用script步骤包围的代码块,而且,这个块内,声明管道基本上像脚本,让你仍然可以使用您引用的答案中描述的技术。

欢迎来到stackoverflow。我希望你在这里过得愉快。

相关问题