2017-03-06 35 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