Невозможно получить доступ к Jenkins API из простого JavaScript

Я новичок в API и JavaScript, поэтому я не уверен, что я здесь делаю не так, пожалуйста, найдите ниже подробную информацию о проблеме, с которой я столкнулся.

Цель - получить подробную информацию о Дженкинсе на веб-странице

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

Проблема - я создал следующий сценарий для выполнения операции -

<script>
    function RunJenkinsJob() {
        
        var xhr = new XMLHttpRequest();
        xhr.open("POST", http://admin:114a2eae5e09d93b6ee831f248892ac581@localhost:8080/job/New_Test/build?token=Datacreation, true);
        xhr.setRequestHeader('Content-Type', 'application/json');
    }));
        
    }
    
    </script>
    <head>
        <style>body{background-color:#d0e4fe;}h1{color:orange;text-align:center;}p{font-family:"Times New Roman";font-size:20px;}</style>
    </head>
    <body>
        <h1>Check Jenkins Job Build</h1>
        <button type="button" onclick="RunJenkinsJob();"> Run Jenkins Job! </button>
    </body>
    </html>

Однако, когда я пытаюсь нажать эту кнопку, ничего не происходит, при доступе к этому URL-адресу непосредственно из браузера меня просят указать имя пользователя и пароль, а затем после обновления новая сборка запускается автоматически.

Вопрос

Как обеспечить аутентификацию для Jenkins в этом методе JavaScript, чтобы при нажатии кнопки можно было запускать новое задание, а также, если я могу получить некоторые указатели о том, как извлечь информацию о сборке, что также было бы очень полезно.

Сведения о системе ОС - версия Windows Jenkins - 2.235.1

- Обновление 1 -

Пожалуйста, найдите обновленную информацию ниже -

<!DOCTYPE html>
<html>
    <script>
    
    function RunJenkinsJob() {
        
        var xhr = new XMLHttpRequest();
        xhr.open("POST", "http://admin:114a2eae5e09d93b6ee831f248892ac581@localhost:8080/job/New_Test/build?token=Datacreation", true);
        xhr.setRequestHeader('Content-Type', 'application/json');
        xhr.send();
        document.write(xhr.status);
        
    }
    
    </script>
    <head>
        <style>body{background-color:#d0e4fe;}h1{color:orange;text-align:center;}p{font-family:"Times New Roman";font-size:20px;}</style>
    </head>
    <body>
        <h1>Check Jenkins Job Build</h1>
        <button type="button" onclick="RunJenkinsJob();"> Run Jenkins Job! </button>
    </body>
    </html>

person Deepak Yadav    schedule 14.02.2021    source источник
comment
Вам необходимо заключить URL-адрес API в кавычки, чтобы JavaScript интерпретировал его как строку. Я также чувствую, что })); не принадлежит и должен быть удален.   -  person Shane Bishop    schedule 14.02.2021
comment
Привет, @ShaneBishop! Спасибо за ваш ценный комментарий, я внес эти изменения и попробовал еще раз, но ответа все еще не получил.   -  person Deepak Yadav    schedule 14.02.2021
comment
Вам следует отредактировать свой вопрос, включив в него свои исправления.   -  person Shane Bishop    schedule 14.02.2021
comment
admin:114a2eae5e09d93b6ee831f248892ac581@localhost:8080 Я не уверен, что Дженкинс все еще поддерживает это. Это приведет к перенаправлению. Вам необходимо передать идентификатор пользователя admin и токен api в виде строки в кодировке base64 в заголовке аутентификации. Также отсутствует xhr.send(). Можете ли вы проверить статус, распечатав его в журнале консоли. `console.log (xhr.status) 'после строки отправки?   -  person Siddharth Kaul    schedule 14.02.2021
comment
Привет, @SiddharthKaul, я попытался добавить xhr.send (), но результаты не такие, как ожидалось. После запуска веб-страница xhr.status () вернула 0.   -  person Deepak Yadav    schedule 14.02.2021
comment
Код состояния 0 означает, что запрос был отменен. Можете ли вы проверить, появляется ли у вас какая-либо ошибка? Вы можете проверить это в консоли браузера ... Кажется, что-то отменяет ваш запрос ...   -  person Siddharth Kaul    schedule 14.02.2021
comment
Привет, @SiddharthKaul, я проверил в консоли браузера, я получил только 1 ошибку: кодировка символов HTML-документа не была объявлена. Кроме того, ошибок нет. После нажатия кнопки на веб-странице отображается 0.   -  person Deepak Yadav    schedule 15.02.2021


Ответы (1)


У меня сработал следующий код.

Поместите это в свою рабочую функцию run jenkins. Это поможет отладке, если он циклически перебирает все 4 изменения состояния и статус, которые он получает.

var xhr = new XMLHttprequest();
var authorizationbasic = window.btoa("username:token");
xhr.onreadystatechange = function() {
    if(this.readyState == 4)
    {
         console.log(this.status);
    }
};
xhr.open("POST", "http://admin:114a2eae5e09d93b6ee831f248892ac581@localhost:8080/job/New_Test/build?token=Datacreation", true);
xhr.setRequestHeader('Authorization','Basic ' + authorizationbasic)
xhr.send();

Если вы по-прежнему получаете статус 0, вы можете проверить настройку CORS Filter в вашей установке jenkins.

person Siddharth Kaul    schedule 20.02.2021
comment
Привет, этот ответ был очень полезен, после проверки моего ответа мне пришлось установить CORS Filter для моих jenkins, и я смог успешно инициировать свои запросы. Я заметил две вещи: 1.) URL-адрес может быть без имени пользователя и токена 2.) Плагин CORS чрезвычайно важен. - person Deepak Yadav; 04.03.2021