2017-03-06 14 views
1

すべての成果物に対して、ビルドおよびデプロイメントプロセスがあります。単一の成果物のビルドまたはデプロイメントが失敗した場合、プロセス全体を停止してはなりません。ダウンストリームジョブから変数を取得する

私たちはビルドとデプロイのために別々の仕事を持っています。ビルドジョブは、スレーブ上で並行して動作し、展開することはできません。

ビルドジョブの結果は、deployジョブで使用する必要があります。何とかビルドのワークスペースの場所を取得し、それをデプロイジョブのパラメータとして設定する必要があります。ワークスペースを配置する場所に疑問符がついています。

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を使用します。

関連する問題