【问题标题】:How to get jenkins job build status using java如何使用 java 获取 jenkins 作业构建状态
【发布时间】:2018-12-26 16:10:51
【问题描述】:

我正在尝试编写一个 java 程序,它将提供特定作业的构建状态,这个 Jenkins 作业每小时运行一次,我想获取最后一次构建的构建状态(成功或失败) 24小时。我可以从以下 url 格式获取构建信息: /job//api/json?tree=allBuilds[result,number,url,timestamp] 或 http://jenkins.myteam-aws.local:8080/job/HealthCheckerApp/api/json?tree=allBuilds[result,number,url,timestamp] 但问题是当我登录应用程序时,我可以检索信息,但是当我从 java 应用程序调用上述 url 时,我收到 500 错误,此错误的可能原因可能是登录凭据丢失。 那么我怎样才能从 URL 中读取这个 json 数据呢? 在这方面寻求您的帮助。

// below code will read the json data from the given url

public class JsonReader {

private static String readAll(Reader rd) throws IOException {
    StringBuilder sb = new StringBuilder();
    int cp;
    while ((cp = rd.read()) != -1) {
        sb.append((char) cp);
    }
    return sb.toString();
}

public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException {
    InputStream is = new URL(url).openStream();
    try {
        BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
        String jsonText = readAll(rd);
        JSONObject json = new JSONObject(jsonText);
        return json;
    } finally {
        is.close();
    }
}

public static void main(String[] args) throws IOException, JSONException {
    System.out.println("inside main-------->");
    JSONObject json = readJsonFromUrl("http://jenkins.myteam-aws.local:8080/job/HealthCheckerApp/api/json?tree=allBuilds[result,number,url,timestamp]");

    System.out.println("Json object created: " + json);
    System.out.println(json.toString());
}
}

结果:成功

内置编号:4715

网址:http://jenkins.myteam-aws.local:8080/job/Thor-API-Prod-Health-Checker/4715/

时间戳:1545803471449

【问题讨论】:

  • 您可以访问 Jenkins 日志吗?也许你可以弄清楚真正的 500 错误是因为登录还是什么......
  • 我没有检查日志,当我执行程序然后在 Netbeans 中它向我显示 500 错误,当我通过 selenium 登录到 jenkins 并调用 url 然后我没有收到这样的错误。
  • driver.get("jenkins.myteam-aws.local:8080"); WebElement userTextField = driver.findElement(By.id("j_username")); userTextField.sendKeys(user); WebElement PassTextField = driver.findElement(By .name("j_password")); PassTextField.sendKeys(pass); driver.findElement(By.id("yui-gen1-button")).click(); driver.get("jenkins.myteam-aws.local:8080/job/HealthCheckerApp/api/…);跨度>
  • java客户端安全吗?我的意思是它是受信任的应用程序吗?
  • @JRichardsz 对不起,我没有理解这里trusted的意思,请你解释一下。

标签: java jenkins jenkins-cli


【解决方案1】:

如果您无权访问 Jenkins 日志,但仍然认为是登录问题,请尝试使用 用户名API 令牌

您可以从http://<jenkins-server>/user/<username>/configure获取API Token

在这里,您有两种不同的方式来调用 Jenkins 的用户和令牌。例如,所有作业的列表:

curl -X GET http://<jenkins-server>/api/json?pretty=true --user <username>:<api-token>

或删除作业的示例

http://<username>:<api-token>@<jenkins-server>/job/<job-name>/doDelete

【讨论】:

  • 除了doDelete我们还有其他方法吗,在生产中检查,不能执行这些操作:(
  • 可能是权限问题。您是 Jenkins 管理员还是拥有适当的权限?这里有更多例子gist.github.com/marshyski/abaa1ccbcee5b15db92c
【解决方案2】:

如果您首先调用 URL.openConnection 并转换为 HttpURLConnection,那么您可以检查状态并使用 getErrorStream() 读取错误文本并抛出包含错误消息的异常。

只需替换此方法的代码:

public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException {
    HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
    if (conn.getResponseCode() != 200) {
        // error occurred, get details and throw exception
        // this uses Commons IO to read all bytes from an InputStream
        byte[] errorBytes = IOUtils.readFully(conn.getErrorStream(), 2048, false);
        // if you have Java 9+ then use this instead:
        // byte[] errorBytes = conn.getErrorStream().readFully();
        String msg = new String(errorBytes, "UTF-8");
        throw new IOException(msg);
    }
    InputStream is = conn.getInputStream();
    try {
        BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
        String jsonText = readAll(rd);
        JSONObject json = new JSONObject(jsonText);
        return json;
    } finally {
        is.close();
    }
}

【讨论】:

  • Jenkins [Jenkins]
  • 脚本>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 2020-03-30
  • 1970-01-01
  • 2015-04-03
  • 2020-01-07
相关资源
最近更新 更多