Как предотвратить сборку от кода плагина в Jenkins - PullRequest
1 голос
/ 14 декабря 2011

Я пытаюсь написать плагин, который будет предотвращать сборку на основе определенных условий. Я попытался поставить условные проверки в методе prebuild (переопределено), но из того, что я вижу, лучшее, на что я могу надеяться, это установить состояние сборки на Result.ABORTED или Result.FAILURE.

Кто-нибудь знает, как либо

  • удалить сборку из очереди на сборку без истории (т. Е. Через предварительную сборку),

    OR

  • Какой метод используется для определения того, следует ли разрешить сборку?

1 Ответ

1 голос
/ 11 декабря 2012

Как минимум, одним из способов является расширение QueueTaskDispatcher.С его помощью вы получаете работу и узел и можете заблокировать его сборку на этом узле в то время.Конечно, вы можете не заботиться об узле, а просто заблокировать работу всегда.Этот метод будет периодически вызываться для запланированных заданий, когда Дженкинс пытается найти узел для его сборки.

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;
    }
}
...