我距离用一个 Jenkins 文件替换大量定制的 Jenkins 文件仅一步之遥。我需要获取的是包含正在执行的 Jenkinsfile 的目录。我正在使用声明性管道语法。
我查看了groovy代码中的几个想法,但找不到如何获得它。
对于那些需要查看特定内容的人,Jenkinsfile 的顶部如下所示:
#!/usr/bin/env groovy
pipeline {
agent any
environment {
tf='/var/lib/jenkins/tools/terraform0108/terraform'
dir='clients/xyz/us-east-1/dev'
}
Run Code Online (Sandbox Code Playgroud)
该变量dir被分配给该 Jenkinsfile 的位置。稍后在 groovy 代码中访问 dir。我希望能够省略该分配并仅从执行脚本的上下文中选取该目录。
我尝试了几种不同的方法,例如包含的步骤
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 }”和其他变体。
我需要在步骤 -- sh 块中使用该目录,因此我相信它需要位于环境项中。
现在,Jenkins 作业配置提供了 Jenkins 文件的路径,但我不想重复该操作以在该级别创建另一个环境变量。
已经咨询过:
感谢帮助。
有很多方法可以做到这一点。我可以立即想到以下两种方法:
steps {
println(WORKSPACE)
}
Run Code Online (Sandbox Code Playgroud)
或者
steps {
def foo = sh(script: 'pwd', returnStdout: true)
println(foo)
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
24870 次 |
最近记录: |