java - 使用java客户端实时检索jenkins的构建日志

标签 java jenkins file-io

对于某些任务,我需要从 Jenkins 实时获取构建日志。我正在使用以下代码来检索日志。然而问题是,由于我实时运行下面的代码(当 Jenkins 作业运行时),我得到了部分数据,因为构建日志随着作业的进展不断更新。例如,假设作业在中午 12 点开始并持续 10 分钟,当下面的代码在中午 12:01 运行时,它只会获得部分日志,因为日志会随着作业的进展不断追加。

是否有一种有效的方法来持续轮询并获取每个请求的所有增量。

谢谢。

public static InputStream getInputStream(){

        URL urls = null;
        try {
            urls = new URL("https://jenkins-prod/job/Tests/job/Pipeline_Tests/lastBuild/consoleText");
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        HttpURLConnection connection = null;
        try {
            connection = (HttpURLConnection) urls.openConnection();
        } catch (IOException e) {
            e.printStackTrace();
        }
        connection.setDoOutput(true);
        connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2");
        System.setProperty("http.agent", "Chrome");
        connection.setInstanceFollowRedirects(false);
        try {
            connection.setRequestMethod("GET");
        } catch (ProtocolException e) {
            e.printStackTrace();
        }
        connection.setRequestProperty("Content-Type", "application/json");

        try {

            BufferedReader br = new BufferedReader(new InputStreamReader(
                    (connection.getInputStream())));

              String line;
              do {
                  line = br.readLine();
                  System.out.println(line);
                  System.out.flush();
              } while  ((line = br.readLine())!= null);

            return connection.getInputStream();

        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return null;
    }

最佳答案

如果确实需要通过程序实时读取构建日志(构建运行时);假设您将阅读作业“A”的日志

  • 定义作业“A”的预构建操作,该操作将启动您的“监听器” 构建开始之前的程序。
  • 预构建将启动您的监听器,如果您可以在小周期内监听,那么您将捕获构建开始的时间。

但是,如果要求可能有所不同,您可以在构建完成后获得内容,则可以使用此类插件将构建日志内容发送到任何地方。一个例子https://wiki.jenkins.io/display/JENKINS/Email-ext+plugin发送电子邮件的插件。

关于java - 使用java客户端实时检索jenkins的构建日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58737307/

相关文章:

Java:使用正则表达式计算字符串中的数字

jenkins - 用于持续集成/持续部署的 Docker 镜像版本控制

c++ - WriteFile 什么都不做

jenkins - 声明式 Jenkins 管道;如何声明变量并在脚本或邮件通知中使用它?

bash - 如何从 Jenkins 控制台日志中删除注释?

c# - 在 .Net 中将字符串搜索到最大 1GB 的大文件/文件夹中最好和最快的技术是什么?

android - 在 Android 中打开以阿拉伯语命名的文件

java - 为什么我的Integer.parseInt无法正常工作?

java - 为什么 GC 每小时运行一次?

java - 如何在捆绑的 JRE 中启用 Java Access Bridge?