如何获取jenkins管道插件作业的工作区(WorkflowRun对象java API)

2024-01-02

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

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

在 Pipeline 插件中,我无权访问工作区,运行对象是 org.jenkinsci.plugins.workflow.job.WorkflowRun 的实例,并且该对象不链接到任何工作区。

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

我怎么才能得到它?

谢谢


我花了一段时间才弄清楚。 您可以通过以下方式从 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 步骤获取的工作空间。 您可能想要存储节点/工作空间,因为您很可能会在复杂的管道上获得其中的多个节点/工作空间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取jenkins管道插件作业的工作区(WorkflowRun对象java API) 的相关文章

随机推荐