2011-12-14 2 views
1

특정 조건에 따라 빌드가 수행되지 않도록하는 플러그인을 작성하려고합니다. 나는 조건부 체크를 prebuild (오버라이드) 방식으로 시도했지만, 내가 볼 수있는 것에서는 빌드 상태를 Result.ABORTED 또는 Result.FAILURE으로 설정하고있다.Jenkins의 플러그인 코드에서 빌드를 막는 방법

사람 중 하나

  • 은 무엇 방법, 그것은합니다 (사전 빌드를 통해, 예) 어떤 역사를하지 않고

    또는

  • 을 빌드 큐에서 빌드를 제거하는 방법을 알고 있나요 빌드가 허용되어야하는지 여부를 결정하는 데 사용됩니까?

답변

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; 
    } 
} 
+0

고마워요! 우리는 그 일을 잠시 후 돌아 보았습니다. 그러나 이것으로 또 다른 균열을 잡을 것입니다. – sybkar

관련 문제