如何获取 jenkins 管道插件作业的工作区(WorkflowRun 对象 java API )
How to get workspace of jenkins pipeline plugin job (WorkflowRun object java API )
在 java API 中,我可以从 Run.java 对象访问工作区路径:
(直到今天,所有对象都是 hudson.model.AbstractBuild 的实例)
- hudson.model.AbstractBuild#getWorkspace()
- hudson.model.Run#getExecutor().getCurrentWorkspace()
在 Pipeline 插件中,我无权访问工作区,运行 对象是 org.jenkinsci.plugins.workflow.job.WorkflowRun 的实例,并且该对象不 link 任何工作区。
此调用 return 无效:hudson.model.Run#getExecutor().getCurrentWorkspace()
我怎样才能得到它?
谢谢
您可以简单地这样做:
node {
withEnv(["WORKSPACE=${pwd()}"]) {
echo WORKSPACE
}
}
有关详细信息,请参阅 this 参考资料。
我花了一段时间才弄明白。
您可以通过以下方式从 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 步骤获取的工作空间。
您可能想要存储 node/workspaces,因为您很可能会在复杂的管道中获取其中的几个。
在 java API 中,我可以从 Run.java 对象访问工作区路径: (直到今天,所有对象都是 hudson.model.AbstractBuild 的实例)
- hudson.model.AbstractBuild#getWorkspace()
- hudson.model.Run#getExecutor().getCurrentWorkspace()
在 Pipeline 插件中,我无权访问工作区,运行 对象是 org.jenkinsci.plugins.workflow.job.WorkflowRun 的实例,并且该对象不 link 任何工作区。
此调用 return 无效:hudson.model.Run#getExecutor().getCurrentWorkspace()
我怎样才能得到它?
谢谢
您可以简单地这样做:
node {
withEnv(["WORKSPACE=${pwd()}"]) {
echo WORKSPACE
}
}
有关详细信息,请参阅 this 参考资料。
我花了一段时间才弄明白。 您可以通过以下方式从 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 步骤获取的工作空间。 您可能想要存储 node/workspaces,因为您很可能会在复杂的管道中获取其中的几个。