2017-12-31 10 views
1

사용자 지정 모니터링 도구의 경우 Jenkins 빌드의 콘솔 로그를 청크로 가져 오는 API (REST)가 필요합니다.청크에서 빌드 로그를 검색하는 Jenkins API

/consoleText 및/logText/progressive {Text | HTML} API에 대해 알고 있지만이 문제는 가끔씩 빌드 로그가 매우 커질 수 있습니다 (최대 몇 GB). 전체 로그를 한 조각으로 가져 오거나 전송하지 않도록 기존 API를 사용하는 방법을 찾지 못했습니다. 그러면 일반적으로 Jenkins 마스터가 정상적으로 작동하지 않습니다.

파일에서 청크를 효율적으로 가져 오는 Java 코드가 이미 있으며, 올바르게로드 된 기본 Jenkins 플러그인이 있습니다. 그게 내가 시도

http://.../jenkins/myPlugin/logChunk?start=1000&size=1000&job=<jobName>&build=<buildNr> 

쉽게 만약 내가, 또한

http://.../jenkins/job/<jobname>/<buildnr>/myPlugin/logChunk?start=1000&size=1000 

또는 같은 예를 들어, REST를 통해 내 플러그인을 호출 할 수 있도록

올바른 확장 점은 내가 부족 무엇입니까 내 플러그인을 다음과 같이 등록하십시오 (아래 코드는 작동하지 않습니다!)

@Extension 
public class JobLogReaderAPI extends TransientActionFactory<T> implements Action { 

    public void doLogChunk(StaplerRequest req, StaplerResponse rsp) throws IOException { 
     LOGGER.log(Level.INFO, "## doLogFragment req: {}", req); 
     LOGGER.log(Level.INFO, "## doLogFragment rsp: {}", rsp); 
    } 

내 플러그인 동작을 등록 할 수있는 올바른 위치를 찾지 못했습니다.

등록 방법을 확인할 수있는 기존 플러그인에 대한 팁이나 조언이 있습니까?

+0

논리를 실행합니다.이에 대한 매우 간단한 예가 될 수 있습니다 내가 뭘하는거야? 노력, 나는 그것을 줄 것이다. – jammann

답변

0

이것은 실제로 예상했던 것보다 훨씬 간단합니다. 항상 그렇듯이 : 플러그인 시스템을 이해하고 나면 몇 줄의 코드 만 있으면됩니다.

쓰기이 매우 간단한 클래스

젠킨스에 의해 호출 내 경우는 ""구축 "나에 (해당 개체에 대한 작업을 등록하는 것 얻을"작업 공장 '이었다 내가 할하는 데 필요한 모든 밝혀 "

public class ActionFactory extends TransientBuildActionFactory { 

    public Collection<? extends Action> createFor(Run target) { 
     ArrayList<Action> actions = new ArrayList<Action>(); 
     if (target.getLogFile().exists()) { 
      LogChunkReader newAction = new LogChunkReader(target); 
      actions.add(newAction); 
     } 
     return actions; 
    } 

클래스 구현 난 그냥 DeleteLogPlugin https://github.com/jenkinsci/delete-log-plugin을 발견

public class LogChunkReader implements Action { 
    private Run build; 

    public LogChunkReader(Run build) { 
     this.build = build; 
    } 

    public String getIconFileName() { 
     return null; 
    } 

    public String getDisplayName() { 
     return null; 
    } 

    public String getUrlName() { 
     return "logChunk"; 
    } 

    public Run getBuild() { 
     return build; 
    } 

    public void doReadChunk(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException {