在Java API中,我可以从Run.java对象访问工作区路径:(直到今天,所有对象都是hudson.model.AbstractBuild的实例)
在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步骤获取的工作空间。您可能要存储节点/工作区,因为大多数probalby都会在复杂的管道上获得其中的几个。
问题内容: 我想在管道作业中使用EnvInject插件。因此,我可以设置复选框“为运行准备一个环境”,但是 没有动作“注入环境变量”,就像在自由式作业中一样。我在“属性内容”块中声明了变量:在此处输入图片说明 如何使用EnvInject在管道作业中注入环境变量? 问题答案: 如果在“属性内容”块中声明了以下变量: 然后,您可以将它们放入管道中,以便:
问题内容: 我正在尝试制作一个Jenkins插件。您如何从插件获取工作信息?我知道 但是,我不知道如何调用此方法。 问题答案: 我编写了以下常规脚本,以从工作中获取所有内部版本号。 该工作詹金斯API可以给你额外的手柄,以获取有关作业的信息
问题内容: 我们正在运行Jenkins 2.x,并且喜欢新的Pipeline插件。但是,由于存储库中有如此多的分支,因此磁盘空间会迅速填满。 是否有任何与Pipeline兼容的插件,我可以在成功构建后清除工作空间? 问题答案: 您可以将其用作管道Jenkinsfile的最后一步(假设您没有更改工作目录)。
问题内容: 我需要在构建开始之前清除工作空间。我尝试分阶段使用,但在声明性管道中,检出首先发生,而在运行阶段时,检出的代码也会被清除,这是不希望的。在声明式管道中签出之前,我们如何清除工作空间? 问题答案: 在Git运行时使用VCS的方法
我有一个Jenkins管道作业,它需要监控另一个Jerkins作业(比如JobA)当前构建,并在当前管道阶段发布状态(构建状态:成功或失败)。如何实现这一点。不会从管道作业触发作业(JobA)。它将独立运行。从管道作业中,需要获取作业A的状态。
在Jenkins管道中,当在特定节点上运行构建时,会在该代理上分配工作区。我们没有设置工作区路径,所以它是自动确定的。我知道工作区必须包含执行程序编号,以便在同一代理上同时运行相同作业时隔离构建。 但是工作区路径是如何构造的? 我们的构建被分配给一个特定的节点(有4个执行器),并且被配置为不允许并发构建。通常分配给: 在某个时刻,构建开始在executor 2上运行,但仍然使用与以前相同的工作区。