如何在Jenkins管道脚本中获取文件的绝对路径(来自工作空间)(在Windows环境中)

时间:2018-02-12 06:12:36

标签: jenkins groovy jenkins-pipeline filepath absolute-path

如何在Jenkins管道脚本中(在Windows环境中)获取文件的绝对路径(来自工作空间)

文件位置(文件从Git签出,Jenkinsfile2.nprd将具有groovy管道脚本):

C:/ Program Files(x86)/Jenkins/workspace/dev-my-api/my-data-api/my-data-api/pom.xml C:/ Program Files(x86)/Jenkins/workspace/dev-my-api/my-data-api/Jenkinsfile2.nprd

脚本:

 stages {
        stage('Setup')  {
            steps {
                script {
                  pomPath = findFiles(glob: "**/pom.xml")[0].path
                  env.WORKSPACE = pwd()
                  pomDir = bat(script: "for %%F in ($pomPath) do set dirname=%%~dpF", returnStdout: true).trim()
                  echo "env.WORKSPACE:" + env.WORKSPACE
                  echo "pom file path:" + pomPath
                  echo "pom directory****:" + pomDir
                }
            }
        }
}

输出:

env.WORKSPACE:C:\Program Files (x86)\Jenkins\workspace\dev-my-api
pom file path:my-data-api\pom.xml
pom directory****:C:\Program Files (x86)\Jenkins\workspace\my-data-api>for %F in (my-data-api\pom.xml) do set dirname=%~dpF 

需要路径:

C:/ Program Files(x86)/ Jenkins / workspace / dev-my-api / my-data-api

如何在没有硬编码的情况下在Jenkins管道脚本中获取上述所需路径?

4 个答案:

答案 0 :(得分:1)

pomPath = findFiles(glob: "**/$pomFile")[0].path
env.WORKSPACE = pwd()
def projectName = new File(pomPath).parent
baseDir = "${env.WORKSPACE}/$projectName"

我能够获得所需的路径。但寻找更清洁的解决方案。

答案 1 :(得分:0)

也许只是:

new File(env.WORKSPACE, pomPath).getParent()

答案 2 :(得分:0)

尝试以下(找到pom.xml相对路径&获取完整路径)

 def pomPath = findFiles(glob: "**/pom.xml")[0].path
 echo new File(env.WORKSPACE, pomPath).getParent() +"\pom.xml"

答案 3 :(得分:0)

这可以通过正则表达式完成:

// match everything from start of string to last \
matcher = pomPath =~ /(^.*\\)/
// first match object, first capture
directory = matcher[0][1]