web-dev-qa-db-ja.com

Jenkins宣言パイプライン-使用中のJenkinsfileへのパスを取得する方法は?

一連のJenkinsfileスクリプトがありますが、それぞれがJenkinsfileを保持するSCMチェックアウト内のディレクトリを指すように環境項目を構成します。これは、同じディレクトリ内のファイルを参照するために使用されます。 SCMリポジトリでは、これらのJenkinsfileスクリプトがすべて別のディレクトリにあります。 Jenkinsfileを含むディレクトリのパスしか取得できなかった場合は、パイプラインスクリプトを同じように簡単に開くことができます。

含むステップのようないくつかの異なることを試しました

script {
    println __FILE__
}

そして

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

どちらも実行されませんでした(__FILE__のケースでは存在しない変数を、2番目のケースでは権限違反を与えました)。 "${__FILE__}"やその他の亜種を試しました。

私はディレクトリをsteps-shブロックで使用する必要があるため、環境アイテムに含める必要があると思います。

今、Jenkinsジョブ構成はJenkinsファイルへのパスを提供しますが、そのレベルで別の環境変数を作成するためにそれを繰り返す必要はありません。

相談済み:

助けていただければ幸いです。

8
Kevin Buchs

本当にこれが必要な場合は、"${JOB_URL}config.xml"およびscriptPathを解析します。

しかし、それは明らかにクリーンなソリューションではありません。

1
Chadi

別のスレッド で見つかりました:

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

しかし、それは多くの方法を承認する必要があります。

0
MagMax