Как получить статус сборки работы Дженкинса, используя Java - PullRequest
0 голосов
/ 26 декабря 2018

Я пытаюсь написать Java-программу, которая будет предоставлять статус сборки конкретного задания, это задание Jenkins выполняется каждый час, и я хочу получить статус сборки (успешной или неудачной) каждой сборки для последней24 часа.Я могу получить информацию о сборке из приведенного ниже формата URL: / job // api / json? Tree = allBuilds [результат, число, URL, метка времени] ИЛИ http://jenkins.myteam -aws.local: 8080 / job / HealthCheckerApp /api / json? tree = allBuilds [результат, число, URL, метка времени] Но проблема в том, что когда я вошел в приложение, я могу получить информацию, но когда я вызываю вышеуказанный URL из приложения Java, то я получаюошибка 500, возможной причиной этой ошибки может быть отсутствие учетных данных для входа.Так, как я мог прочитать эти данные JSON из URL?Обращаюсь за помощью в этом отношении.

// 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

url: http://jenkins.myteam -aws.local: 8080 /работа / Thor-API-Prod-Health-Checker / 4715 /

Метка времени: 1545803471449

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Если вы сначала вызываете 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();
    }
}
0 голосов
/ 26 декабря 2018

Если у вас нет доступа к журналу Jenkins и вы все еще думаете, что проблема с входом в систему, попробуйте ввести имя пользователя и API-токен .

. Вы можетеполучите токен API от http://<jenkins-server>/user/<username>/configure

И здесь у вас есть два разных способа вызова с пользователем и токен Дженкинсу.Например, список всех заданий:

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

или пример удаления задания

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

...