如何防止Jenkins中的插件代码构建

时间:2011-12-14 16:49:03

标签: build jenkins hudson hudson-plugins

我正在尝试编写一个插件,以防止基于某些条件发生构建。我已经尝试将条件检查放在prebuild方法中(被覆盖),但从我所看到的,我希望从中完成的最好的是将构建状态设置为Result.ABORTED或{{ 1}}。

有谁知道如何

  • 从构建队列中删除构建而没有任何历史记录(即通过预构建),

    或者

  • 使用什么方法来确定是否应该允许构建?

1 个答案:

答案 0 :(得分:1)

至少有一种方法是扩展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;
    }
}