2017-03-06 68 views
1

我们为每个工件都有一个构建和部署过程。如果单个构件的构建或部署失败,则不应该停止整个过程。从下游作业获取变量

我们有一个独立的作业用于构建和部署。构建作业可以在从属系统上并行工作,不需要部署。

部署作业应该使用构建作业的结果。我需要以某种方式获取构建的工作区位置,并将其设置为部署作业的参数。我需要放置工作区的地方标有问号。

def branches = [:] 
def artifactsToDeploy = [] 
node{ 
    workspace = pwd() 
    echo "Workspace:${workspace}" 

    //read artifact names from file 
    def appFile=readFile(workspace+"@script/artifacts.txt") 
    def artifactNames = appFile.tokenize() 

    //prepare parallel jobs 
    for (int i=0 ; i < artifactNames.size ; i++) { 
     def artifactName=artifactNames[i] 
     branches[artifactName]={ 

      //start build job 
      def buildResult = build job: 'build-artifact', parameters: [[$class: 'StringParameterValue', name: 'ARTIFACT', value:artifactName], 
      [$class: 'StringParameterValue', name: 'SVN_TAG', value:SVN_TAG]] 

      //need to read workspace from a build job, that was running on a slave 
      artifactsToDeploy[artifactsToDeploy.size]=[artifact:artifactName,workspace:?????] 
     } 
    } 

    echo 'pipeline begin' 
    stage('build'){ 
     parallel branches 
    } 

    stage('deploy'){ 

     //read artifacts from a list and deploy 
     for (int i=0;i<artifactsToDeploy.size;i++) { 
      def buildResult = build job: 'deploy-artifact', parameters: [[$class: 'StringParameterValue', name: 'ARTIFACT', value:artifactsToDeploy[i].artifact], 
      [$class: 'StringParameterValue', name: 'WORKSPACE', value:artifactsToDeploy[i].workspace]] 
     } 
    } 
    echo 'pipeline end' 
} 

回答

0

你不应该需要有下游构建可用的工作空间,只需使用archive,使工件持续和传递一个参数,其需要了解其工作的参考,然后用Copy Artifact Plugin在下游工作中获得神器。

0

有一个rawBuild,可以使用。要访问工作区,请使用buildResult.rawBuild.environment.WORKSPACE