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

Joe*_*g S 54 jenkins jenkins-workflow jenkins-pipeline

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

工作流脚本中当前不可使用以下变量:

NODE_LABELS

工作区

特定于SCM的变量,例如SVN_REVISION

有没有其他方法如何获得当前工作区的绝对路径?我需要运行一些测试,然后获取一些参数(一些可执行文件的绝对路径).我已经尝试new File("").absolutePath()在一个@NonCPS部分内部使用,但看起来非CPS的东西总是在主服务器上执行.

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

Ale*_*eks 48

注意:此解决方案仅在从属服务器具有与主服务器相同的目录结构时才有效.pwd()由于JENKINS-33511,将返回主服务器上的工作空间目录.

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

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 
}
Run Code Online (Sandbox Code Playgroud)

  • 该死的。可能需要一些眼镜。完全错过了可用的pwd()。那正是我想要的。谢谢! (2认同)
  • 这是我刚刚亲自证实的事实。`pwd()` 不会在从属设备上工作,除非它们恰好具有与主设备相同的目录结构。 (2认同)

Jan*_*bry 32

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


anu*_*901 14

“ 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
Run Code Online (Sandbox Code Playgroud)

希望有帮助!!

  • @anuj0901我完全同意,带有代码示例的答案应该是可接受的答案,而不仅仅是文本答案。感谢您提供额外的内容。 (3认同)
  • 我查看了那个答案,但它没有代码示例。所以我在实施之前仍然需要做一些研究。我不介意否决票,但我希望我的回答只需复制语法即可立即帮助某人。 (2认同)