web-dev-qa-db-ja.com

Jenkins Pipelineプラグインのワークスペースディレクトリへの絶対パスを取得する

現在、Jenkins Pipelineプラグイン(以前はWorkflowプラグインと呼ばれていました)の評価を行っています。ドキュメントを読むと、現在env.WORKSPACEを使用してワークスペースパスを取得できないことがわかりました。

現在、ワークフロースクリプト内では次の変数は使用できません。

NODE_LABELS

ワークスペース

SVN_REVISIONなどのSCM固有の変数

現在のワークスペースへの絶対パスを取得する他の方法はありますか?私はこれにいくつかのテストを実行する必要があり、そのテストはいくつかのパラメーター(いくつかの実行可能ファイルへの絶対パス)を取得します。 @NonCPSセクション内でnew File("").absolutePath()を使用しようとしましたが、CPS以外のものは常にマスターで実行されるようです。

誰かが後で再び読み込むことができるファイルにパスを保存するバッチスクリプトを実行してこのパスを取得する方法の手がかりを持っていますかwithout

48
Joerg S

Pipeline Nodes and Processes Plugin (デフォルトでインストールされるPipelineプラグインのコンポーネント)のバージョン2.5以降、WORKSPACE環境変数が再び利用可能になりました。このバージョンは2016年9月23日にリリースされたため、すべての最新のJenkinsインスタンスで使用できます。

28
Jan Fabry

:このソリューションは、スレーブがマスターと同じディレクトリ構造を持っている場合にのみ機能します。 pwd()は、 JENKINS-33511 が原因で、マスター上のワークスペースディレクトリを返します。

以前は、パイプラインプラグインのpwd()機能を使用して実行していました。そのため、スレーブ上にワークスペースを取得する必要がある場合は、次のようにしてください。

node('label'){
    //now you are on slave labeled with 'label'
    def workspace = pwd()
    //${workspace} will now contain an absolute path to job workspace on slave 
}
46
Aleks

「WORKSPACE」環境変数は、Jenkins Pipelineの最新バージョンで機能します。 Jenkinsファイルでこれを使用できます: "$ {env.WORKSPACE}"

以下の使用例:

def files = findFiles glob: '**/reports/*.json'
for (def i=0; i<files.length; i++) {
jsonFilePath = "${files[i].path}"       
jsonPath = "${env.WORKSPACE}" + "/" + jsonFilePath
echo jsonPath

それが役立つことを願っています!!

13
anuj0901