在 Jenkins Pipeline 插件中获取工作区目录的绝对路径

Get absolute path to workspace directory in Jenkins Pipeline plugin

我目前正在对 Jenkins Pipeline 插件(以前称为 Workflow 插件)进行一些评估。 阅读文档我发现我目前无法使用检索工作区路径 env.WORKSPACE:

The following variables are currently unavailable inside a workflow script:

NODE_LABELS

WORKSPACE

SCM-specific variables such as SVN_REVISION

有没有其他方法可以获取当前工作区的绝对路径?我需要这个 运行 一些测试,它又得到一些参数(一些可执行文件的绝对路径)。 我已经尝试在 @NonCPS 部分中使用 new File("").absolutePath(),但看起来非 CPS 的内容总是在 master 上执行。

有没有人知道如何在没有 运行 一些批处理脚本的情况下获取此路径,该批处理脚本将路径存储到某个文件中,稍后可以再次读取?

注意:此解决方案仅在从服务器具有与主服务器相同的目录结构时才有效。由于 JENKINS-33511.

pwd() 将 return master 上的工作区目录

我曾经使用管道插件的 pwd() 功能来做到这一点。所以,如果你需要在 slave 上获得一个工作空间,你可以这样做:

node('label'){
    //now you are on slave labeled with 'label'
    def workspace = pwd()
    //${workspace} will now contain an absolute path to job workspace on slave 
}

Pipeline Nodes and Processes Plugin 版本 2.5(Pipeline 插件的一个组件,默认安装)起,WORKSPACE 环境变量再次可用。此版本于 2016-09-23 发布,因此它应该适用于所有最新的 Jenkins 实例。

例子

node('label'){
    // now you are on slave labeled with 'label'
    def workspace = WORKSPACE
    // ${workspace} will now contain an absolute path to job workspace on slave

    workspace = env.WORKSPACE
    // ${workspace} will still contain an absolute path to job workspace on slave

    // When using a GString at least later Jenkins versions could only handle the env.WORKSPACE variant:
    echo "Current workspace is ${env.WORKSPACE}"

    // the current Jenkins instances will support the short syntax, too:
    echo "Current workspace is $WORKSPACE"

}

"WORKSPACE" 环境变量适用于最新版本的 Jenkins Pipeline。您可以在 Jenkins 文件中使用它:“${env.WORKSPACE}”

下面的示例使用:

def files = findFiles glob: '**/reports/*.json'
for (def i=0; i<files.length; i++) {
jsonFilePath = "${files[i].path}"       
jsonPath = "${env.WORKSPACE}" + "/" + jsonFilePath
echo jsonPath

希望对您有所帮助!!

对我来说,WORKSPACE 是管道本身的有效 属性。因此,当我将 this 作为参数 context 从管道脚本本身移交给 Groovy 方法时,我能够使用 "... ${context.WORKSPACE} ..."

访问正确的值

(在 Jenkins 2.222.3 上,构建管道插件 1.5.8,管道:节点和进程 2.35)