web-dev-qa-db-ja.com

Jenkinsパイプラインスクリプト(Windows環境)で(ワークスペースから)ファイルの絶対パスを取得する方法

Jenkinsパイプラインスクリプト(Windows環境)で(ワークスペースから)ファイルの絶対パスを取得する方法

ファイルの場所(ファイルはGitからチェックアウトされ、Jenkinsfile2.nprdにはgroovyパイプラインスクリプトが含まれます):

C:/プログラムファイル(x86)/Jenkins/workspace/dev-my-api/my-data-api/my-data-api/pom.xml C:/プログラムファイル(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:/プログラムファイル(x86)/ Jenkins/workspace/dev-my-api/my-data-api

ハードコーディングせずにJenkinsパイプラインスクリプトで上記の必要なパスを取得する方法

以下を試してください(pom.xmlの相対パスを見つけて、フルパスを取得します)

 def pomPath = findFiles(glob: "**/pom.xml")[0].path
 echo new File(env.WORKSPACE, pomPath).getParent() +"\pom.xml"
1
Chids
pomPath = findFiles(glob: "**/$pomFile")[0].path
env.WORKSPACE = pwd()
def projectName = new File(pomPath).parent
baseDir = "${env.WORKSPACE}/$projectName"

必要なパスを取得できます。しかし、よりクリーンなソリューションを探しています。

多分ちょうど:

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

1

これは正規表現で行うことができます:

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