Build 如何防止Jenkins中的插件代码生成

Build 如何防止Jenkins中的插件代码生成,build,jenkins,hudson,hudson-plugins,Build,Jenkins,Hudson,Hudson Plugins,我正在尝试编写一个插件,它可以防止基于特定条件的构建。我曾尝试将条件检查放入预构建方法(已覆盖),但从我所看到的情况来看,我希望在那里实现的最好结果是将构建状态设置为结果。中止或结果。失败 有人知道怎么做吗 从生成队列中删除没有任何历史记录的生成(即通过预生成) 或 使用什么方法来确定是否允许生成 至少有一种方法是扩展QueueTaskDispatcher。使用它,您可以获得作业和节点,并可以阻止它在那个时候构建在那个节点上。当然,您可以不关心节点,而是始终阻止作业。当Jenkins试图找

我正在尝试编写一个插件,它可以防止基于特定条件的构建。我曾尝试将条件检查放入
预构建
方法(已覆盖),但从我所看到的情况来看,我希望在那里实现的最好结果是将构建状态设置为
结果。中止
结果。失败

有人知道怎么做吗

  • 从生成队列中删除没有任何历史记录的生成(即通过预生成)

  • 使用什么方法来确定是否允许生成


至少有一种方法是扩展QueueTaskDispatcher。使用它,您可以获得作业和节点,并可以阻止它在那个时候构建在那个节点上。当然,您可以不关心节点,而是始终阻止作业。当Jenkins试图找到一个用于构建它的节点时,该方法将定期为计划作业调用

import hudson.Extension;
import hudson.model.AbstractProject;
import hudson.model.Node;
import hudson.model.Queue.BuildableItem;
import hudson.model.queue.CauseOfBlockage;
import hudson.model.queue.QueueTaskDispatcher;

@Extension
public class MyTaskDispatcher extends QueueTaskDispatcher {

    @Override
    public CauseOfBlockage canTake(Node node, BuildableItem item) {

        // only care about AbstractProject tasks
        if (!(item.task instanceof AbstractProject<?, ?>)) return null;

        AbstractProject<?, ?> proj = (AbstractProject<?, ?>) item.task;

        if(!proj.getName().contains(node.getNodeName()) {
            return new CauseOfBlockage.BecauseNodeIsBusy("Job name does not contain node name");
        }
        return null;
    }
}
导入hudson.Extension;
导入hudson.model.AbstractProject;
导入hudson.model.Node;
导入hudson.model.Queue.BuildableItem;
导入hudson.model.queue.CauseOfBlockage;
导入hudson.model.queue.QueueTaskDispatcher;
@延伸
公共类MyTaskDispatcher扩展了QueueTaskDispatcher{
@凌驾
公共原因FBlockage canTake(节点,可构建项){
//只关心抽象项目任务
如果(!(item.task instanceof AbstractProject))返回空值;
AbstractProject proj=(AbstractProject)item.task;
如果(!proj.getName()包含(node.getNodeName()){
返回新的CauseOfBlockage.BecauseNodeIsBusy(“作业名称不包含节点名称”);
}
返回null;
}
}

至少有一种方法是扩展QueueTaskDispatcher。通过它,您可以获得作业和节点,并可以阻止在该节点上构建该作业。当然,您可以不关心该节点,而是始终阻止该作业。当Jenkins试图找到一个节点来构建该作业时,将定期为计划作业调用该方法

import hudson.Extension;
import hudson.model.AbstractProject;
import hudson.model.Node;
import hudson.model.Queue.BuildableItem;
import hudson.model.queue.CauseOfBlockage;
import hudson.model.queue.QueueTaskDispatcher;

@Extension
public class MyTaskDispatcher extends QueueTaskDispatcher {

    @Override
    public CauseOfBlockage canTake(Node node, BuildableItem item) {

        // only care about AbstractProject tasks
        if (!(item.task instanceof AbstractProject<?, ?>)) return null;

        AbstractProject<?, ?> proj = (AbstractProject<?, ?>) item.task;

        if(!proj.getName().contains(node.getNodeName()) {
            return new CauseOfBlockage.BecauseNodeIsBusy("Job name does not contain node name");
        }
        return null;
    }
}
导入hudson.Extension;
导入hudson.model.AbstractProject;
导入hudson.model.Node;
导入hudson.model.Queue.BuildableItem;
导入hudson.model.queue.CauseOfBlockage;
导入hudson.model.queue.QueueTaskDispatcher;
@延伸
公共类MyTaskDispatcher扩展了QueueTaskDispatcher{
@凌驾
公共原因FBlockage canTake(节点,可构建项){
//只关心抽象项目任务
如果(!(item.task instanceof AbstractProject))返回空值;
AbstractProject proj=(AbstractProject)item.task;
如果(!proj.getName()包含(node.getNodeName()){
返回新的CauseOfBlockage.BecauseNodeIsBusy(“作业名称不包含节点名称”);
}
返回null;
}
}

谢谢!我们前一段时间已经解决了这个问题,但我会用这个再尝试一次。谢谢!我们前一段时间已经解决了这个问题,但我会用这个再尝试一次。