在声明性詹金斯管道中引用变量

时间:2018-07-06 15:03:33

标签: jenkins-pipeline jenkins-groovy

我正在使用下面的常规调用bat命令,无论我如何在bat命令中引用LOCAL_WORKSPACE都不会对其进行评估。 我想念什么?

错误

  

nuget restore $ env.LOCAL_WORKSPACE   “输入文件不存在:$ env.LOCAL_WORKSPACE”

脚本

pipeline {
agent any
stages {
    stage('Clone repo') {
        steps {
            deleteDir()
            git branch: 'myBranch', changelog: false, credentialsId: 'myCreds', poll: false, url: 'http://myRepoURL'
        }
    }
    stage ("Set any variables") {
        steps{
            script{
                LOCAL_BUILD_PATH = "$env.WORKSPACE"
            }
        }
    }
    stage('Build It, yes we can') {
        parallel {
            stage("Build one") {
                steps {
                    echo LOCAL_BUILD_PATH
                    bat 'nuget restore %LOCAL_WORKSPACE%'
                }
            }
        }
    }
}

}

2 个答案:

答案 0 :(得分:2)

您不能设置变量以在阶段之间共享数据。基本上每个script都有自己的名称空间。

您可以做的是使用pipeline syntax docs中所述的环境指令。这些常量是全局可用的,但是它们是 constants ,因此您无法在任何阶段进行更改。

但是您可以计算值。例如,我使用sh步骤来获取master上的当前提交次数,如下所示:

pipeline {

    agent any

    environment {
        COMMITS_ON_MASTER = sh(script: "git rev-list HEAD --count", returnStdout: true).trim()
    }

    stages {

        stage("Print commits") {
            steps {
                echo "There are ${env.COMMITS_ON_MASTER} commits on master"
            }
        }
    }
}

答案 1 :(得分:0)

您可以使用环境变量来存储和访问阶段。例如,如果将LOCAL_ENVR定义为Jenkins参数,则可以分阶段操作变量:

stage('Stage1') {
       steps {
           script{
                env.LOCAL_ENVR = '2'
           }
       }
    }
    stage('Stage2') {
         steps {
             echo "${env.LOCAL_ENVR}"
         }
    }