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

Referencing variable in declarative jenkins pipeline

我正在使用下面的 groovy 来调用 bat 命令,无论我如何在 bat 命令中引用 LOCAL_WORKSPACE 它都不会对其进行评估。 我错过了什么?

错误

nuget restore $env.LOCAL_WORKSPACE "Input file does not exist: $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%'
                }
            }
        }
    }
}

}

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

您可以使用 pipeline syntax docs 中描述的环境指令。这些 constants 是全局可用的,但它们是 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"
            }
        }
    }
}

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

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