繁体   English   中英

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

[英]Jenkins Declarative Pipeline - how to get path to Jenkinsfile in use?

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

我尝试了几种不同的东西,比如包含的步骤

script {
    println __FILE__
}

script { 
    scriptDir = new File(getClass().protectionDomain.codeSource.location.path).parent
    println scriptDir
}

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

我需要在 steps-sh 块中使用目录,所以我相信它需要在环境项中。

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

已咨询:

感谢帮助。

另一个线程中找到:

def currentScriptPath = new File(currentBuild.rawBuild.parent.definition.scriptPath).parent

但它需要批准很多方法。

如果你真的需要这个,你可以获取"${JOB_URL}config.xml"并解析scriptPath

但这显然不是一个干净的解决方案。

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

鉴于Groovy基本上只是Java,你可以得到如下的绝对路径:

new File("{env.WORKSPACE}").absolutePath

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM