Jenkins - узнать текущее состояние (занят/свободен).

Вот возник вопрос, каким способом узнать у Jenkins, выполняет он сейчас какую нибудь джоб или свободен (в ожидании), интересует HTTP или JSON запрос.

У Jenkins есть REST API. Так же можно поглядеть в сторону python библиотек Python Jenkins и JenkinsAPI

1 лайк

http://jenkins/job/job-name/lastBuild/api/xml?depth=1&xpath=*/building/text()

Отдаёт true/false, вместо job-name имя своего джоба, xpath вытаскивает нужный параметр из xml ответа, если уберешь - увидешь весь ответ. Либо бери json ответ и парсь програмно.

Пример на публичном сервере. Отличие от данного примера в настройках сервера, поэтому как я понял text() получить не получится - http://jenkins.nodejs.org/job/print-env/lastBuild/api/xml?depth=1&xpath=*/building

С другой стороны это можно обойти как то так - http://jenkins.nodejs.org/job/print-env/lastBuild/api/xml?depth=1&xpath=*/building[contains(text(),%27false%27)]

Немного не то, мне нужно только одно выполняет ли женкинс сейчас без разницы какую джобу или стоит ждет когда событие произойдет, т.е. free или busy статус

Тогда можешь парить tree по всем билдам. Узнаем какие билды идут, какие нет: http://jenkins.nodejs.org/api/json?tree=jobs[name,lastBuild[building]] , если не нужны названия, убираем name

Это уже ближе к истине, спасибо!!!
Да и еще вопрос можно ли “усыпить/приостановить” женкинс, а потом “разбудить/запустить”?

Дженкинс не контролирует процессы которые запускает, сама суть задачи не понятна, зачем? Тесты скорее всего упадут за время вашего суспенда.

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

А зачем городить огород? Дженкинс же для этого самого и предназначен. Создайте соответсвующую задачу и всё, и в случае превышения лимита параллельных сборок дженкинс будет ждать, когда освободится.

Для данной задачи не предназначен!

Для запуска выборочного тестов???

Прошу ответы по существу вопроса, отвечу если бы Jenkins подходил для данной задачи я тут бы вопросы не задавал!

Ну как вариант - дизейбл нужной джобы, эндпоинт - http://jenkins.nodejs.org/job/print-env/disable , включение обратно - enable

1 лайк

В том виде, как сформулирована задача - Jenkins её решает. McStar написал как + возможно, с этим плагином

1 лайк

Не решает, надо блокировать как-то програмно через апи, судя по вопросу.

Совершенно верно, твой предложенный вариант подхода к вопросу то что нужно, огромное спасибо.
Вопрос решен, на данный момент :smile: