Jenkins声明性管道 - 如何获取正在使用的Jenkinsfile的路径?

Kev*_*chs 7 groovy jenkins jenkins-groovy jenkins-pipeline

我们有一系列相同的Jenkinsfile脚本,除了每个脚本配置一个环境项以指向包含Jenkinsfile的SCM结账中的目录.它用于引用同一目录中的文件.SCM repo将所有这些Jenkinsfile脚本放在不同的目录中.如果我只能检索包含Jenkinsfile的目录的路径,我会看到一个简单的开头,使管道脚本在每种情况下都相同.

我试过几个不同的东西,比如包含的步骤

script {
    println __FILE__
}
Run Code Online (Sandbox Code Playgroud)

script { 
    scriptDir = new File(getClass().protectionDomain.codeSource.location.path).parent
    println scriptDir
}
Run Code Online (Sandbox Code Playgroud)

两者都没有运行(在__FILE__案例中给出了不存在的变量,在第二种情况下违反了权限).我试过"${__FILE__}"和其他变种.

我需要在step-sh块中使用该目录,所以我认为它需要在一个环境项中.

现在,Jenkins作业配置提供了Jenkins文件的路径,但我不想重复这一点以在该级别创建另一个环境变量.

已经咨询过:

感谢帮助.

Mag*_*Max 7

在另一个线程中找到:

def currentScriptPath = new File(currentBuild.rawBuild.parent.definition.scriptPath).parent
Run Code Online (Sandbox Code Playgroud)

但它需要批准很多方法。


And*_*ray -3

最简单的方法是将 Jenkinsfile 放在存储库的根目录下,并获取 Jenkins 设置的 WORKSPACE 环境变量的值。

鉴于 Groovy 基本上只是 Java,您可以像这样获取绝对路径:

new File("{env.WORKSPACE}").absolutePath
Run Code Online (Sandbox Code Playgroud)

  • 就我而言不是。我们有一个 SCM 存储库,在不同的目录中包含许多 Jenkins 文件。Jenkinsfile 的位置是在创建 Jenkins 管道时给出的。 (3认同)