2

Java APIで、Run.javaオブジェクトからワークスペースパスにアクセスできます: (今日まで、すべてのオブジェクトはhudson.modelのインスタンスでした.AbstractBuild)jenkinsパイプラインプラグインジョブのワークスペースを取得する方法(WorkflowRunオブジェクトJava API)

  1. hudson.model.AbstractBuild#getWorkspace()
  2. hudson.model.Run#getExecutor()。getCurrentWorkspace()

パイプラインのプラグインでは、私がアクセスを持っていません実行オブジェクトは、org.jenkinsci.plugins.wのインスタンスです。 orkflow.job.WorkflowRunおよびこのオブジェクトはどのワークスペースにもリンクしません。

この呼び出しの戻りはnull:。hudson.model.Run#getExecutor()getCurrentWorkspace()

私はそれを得ることができますどのように?

あなたは、単にこれを行うことができ、あなたに

答えて

3

私はそれを理解するためにしばらく時間がかかりました。あなたは今すぐ上のノードとワークスペースを持っている

import org.jenkinsci.plugins.workflow.job.WorkflowRun 
import org.jenkinsci.plugins.workflow.flow.FlowExecution; 
import org.jenkinsci.plugins.workflow.graph.FlowGraphWalker; 
import org.jenkinsci.plugins.workflow.graph.FlowNode; 
import org.jenkinsci.plugins.workflow.graph.StepStartNode; 
import org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode; 
import org.jenkinsci.plugins.workflow.actions.WorkspaceAction 
... 
... 
b = item.getLastBuild() 

if(b instanceof WorkflowRun) { 
    exec = b.getExecution(); 
    if(exec == null) 
     continue; 
    FlowGraphWalker w = new FlowGraphWalker(exec); 
    for (FlowNode n : w) { 
     if (n instanceof StepStartNode) { 
     action = n.getAction(WorkspaceAction); 
     if(action) { 
      String node = action.getNode().toString(); 
      String workspace = action.getPath().toString(); 
     } 
     } 
    } 

}

:(ワークフローの実行が複数のワークスペースを持つことができるよう) あなたはWorkflowRunから次のようにワークスペースにアクセスすることができます。これにより、ノード・ステップで取得されたワークスペースと、wsステップで取得されたワークスペースが取得されます。 ノード/ワークスペースを保存することをお勧めします。複雑なパイプライン上で複数のノード/ワークスペースを取得することをお勧めします。

1

に感謝:

node { 
    withEnv(["WORKSPACE=${pwd()}"]) { 
    echo WORKSPACE 
    } 
} 

詳細はthisリファレンスを参照してください。

+0

ありがとうございました。私はそれが私を助けることができるか分からない。 私はプラグイン(Javaプラグイン)からのアクセスが必要です。 私はバックエンドオブジェクトで作業しています:WorkflowRun.javaとFlowNode.java。 これらのクラスからアクセスポイントが必要です – ALAL

+0

悪いです。私はあなたがパイプラインコードを介してアクセスすることを指していると思った。 – eyalstoler