从下游作业中获取变量

时间:2017-03-06 12:25:44

标签: jenkins jenkins-pipeline

我们为每个工件都有一个构建和部署过程。如果单个工件的构建或部署失败,则不应该停止整个过程。

我们有一个单独的作业用于构建和部署。构建作业可以在从属服务器上并行工作,而不是部署。

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

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'
}

2 个答案:

答案 0 :(得分:0)

您不需要在下游构建中使用工作区,只需使用archive使工件持久化并将参数中的引用传递给需要了解它的作业,然后使用{ {3}}在下游作业中获取工件。

答案 1 :(得分:0)

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