在 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)
我目前正在对 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)