2017-12-31 39 views
1

カスタムモニタリングツールの場合、Jenkinsビルドのコンソールログをチャンクで取得するにはAPI(REST)が必要です。チャンクのビルドログを取得するためのJenkins API

私は/ consoleTextと/ logText/progressive {Text | HTML} APIについて知っていますが、この問題は、時にはGoogleのビルドログが数百GBまで膨大になることがあります。ログ全体を1つにまとめて転送することを避ける既存のAPIを使用する方法はありませんでした。これは通常、ジェンキンスマスターをメモリから追い出す。

ファイルからチャンクを効率的にフェッチするための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

これは実際に私が期待していたよりも簡単でした:-)いつものように:一度プラグインシステムを理解すれば、数行のコードが必要になります。

私が行うために必要なすべてが、私の場合は2つの、非常に単純なクラス

のは、ジェンキンスによって呼び出され、問題のオブジェクトに対してアクションを登録します「アクション工場」(「ビルド」を書いたり」だったが判明」

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 { 
関連する問題