如何获得詹金斯流水线插件作业的工作区(WorkflowRun对象的Java API)(How to

2019-09-29 20:04发布

在Java API中,我可以访问从Run.java对象的工作空间路径:(直到今天,所有的对象都是hudson.model.AbstractBuild的实例)

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

在流水线插件我没有到工作区的访问,运行对象是org.jenkinsci.plugins.workflow.job.WorkflowRun的实例,此对象不会链接到任何工作区。

此调用返回NULL:hudson.model.Run#getExecutor()getCurrentWorkspace()。

我怎么才能得到它?

谢谢

Answer 1:

我花了一段时间才能弄明白。 您可以访问从WorkflowRun工作区(作为工作流运行可以有多个工作区)以下列方式:

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();
      }
    }
  }
}

您现在有节点和它的工作区。 这将捕获由WS步骤获取的节点的步骤,以及工作区获取工作区。 你可能想存储节点/工作区,你会最probalby获得其中几个在复杂的管道。



Answer 2:

你可以简单地这样做:

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

见这为更多信息参考。



文章来源: How to get workspace of jenkins pipeline plugin job (WorkflowRun object java API )