Планирование работы Jenkins с использованием Jenkins Rest API - PullRequest
6 голосов
/ 12 февраля 2020

У меня есть задание Дженкинса, которое запланировано на определенное время c. Я хочу изменить это время программно.

Я попытался изменить сборку, установив плагин Schedule Build и изменив его, используя http://jenkins_url/job/jobname/build?delay=3344sec. Но это переведет работу в тихий период, который содержит поток java. Я пытаюсь изменить запись в расписании, не переводя ее в тихий период.

Ответы [ 2 ]

2 голосов
/ 22 февраля 2020

Вы можете использовать опцию конфигурации задания Build Triggers -> Build periodically. Используйте это, чтобы указать точное время для начала новой сборки.

Если вам нужно изменить это время, используйте Jenkins REST API, чтобы ...

  1. программно получить конфигурацию задания в формате XML, затем
  2. измените время планирования в этой конфигурации (см. ниже)
  3. повторно отправьте новую конфигурацию задания

В bash это можно сделать с помощью одной строки (используя curl и sed), чтобы изменить приведенный ниже раздел XML (в примере запланирован запуск на полдень, 29 февраля):

[...]
<triggers>
<hudson.triggers.TimerTrigger>
<spec>00 12 29 02 * </spec>
</hudson.triggers.TimerTrigger>
</triggers>
[...]

Примечание:

  • в качестве плюса вы не будете зависеть от каких-либо дополнительных плагинов
  • предостережение: вы не можете указать год в расписании - поэтому, если вам нужно запланировать сборки более за год до этого вам нужно волшебные c сверху.
0 голосов
/ 19 февраля 2020

Я не могу заставить его работать, но исходный код для плагина ссылается на действие "schedule" url и параметр "date".

Я попробовал что-то вроде:

http://localhost:8080/job/jobname/job/develop/schedule?date=2020-02-20

Что он не отклонил, но я не вижу сборки.

ниже приведен исходный код выполненного действия когда кнопка нажата по расписанию:

var newRequest = function() {
    if (window.XMLHttpRequest) {
        return new XMLHttpRequest();
    } else {
        return new ActiveXObject("Microsoft.XMLHTTP");
    }
}

var sumbitScheduleRequest = function(absoluteUrl, quietPeriodInSeconds, isJobParameterized){

    if(isJobParameterized){
        // if job has parameters, redirect to build page, so user can set parameters 
        window.location = absoluteUrl + "build?delay=" + quietPeriodInSeconds + "sec";
    }else{
        // if job has NO parameters, submit build directly
        var csrfCrumb;
        var csrfRequest = newRequest();
        csrfRequest.onreadystatechange = function() {
            if (csrfRequest.readyState === 4) {
                if (csrfRequest.status === 200 || csrfRequest.status === 201) {
                    csrfCrumb = JSON.parse(csrfRequest.responseText);
                } else {
                    // csrf might be deactivated
                }

                // do the actual submit 
                var xmlhttp = newRequest();
                xmlhttp.onreadystatechange = function() {
                    if (xmlhttp.readyState === 4) {
                        if (xmlhttp.status === 200 || xmlhttp.status === 201) {
                            window.location = absoluteUrl;
                            return false;
                        } else {
                            window.location = absoluteUrl;
                            return false;
                        }
                    }
                };
                xmlhttp.open("POST", absoluteUrl + "build?delay=" + quietPeriodInSeconds + "sec", true);
                if (csrfCrumb) {
                    xmlhttp.setRequestHeader(csrfCrumb.crumbRequestField, csrfCrumb.crumb)
                }
                xmlhttp.send();
            }
        };

        csrfRequest.open('GET', rootURL + '/crumbIssuer/api/json', false);
        csrfRequest.send(); 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...