Отключить Дженкинс от другой работы - PullRequest
10 голосов
/ 29 декабря 2011

Есть ли способ в Дженкинс (Хадсон) отключить работу от другой работы?

По сути, у нас есть среда сборки, которая выполняет стандартное построение / тестирование. Мы также используем тот же экземпляр Jenkins, чтобы делать некоторые другие вещи, такие как автоматическая установка новых версий нашего продукта (что необходимо для некоторых автоматизированных тестов). Когда мы выполняем некоторые «дополнительные» задания, мы хотим временно отключить «стандартные» задания (а затем автоматически включить их позже).

В идеале на задании должен быть какой-то дополнительный шаг, чтобы сказать «Отключить задание XYZ». Или, если есть способ через ANT или что-то сказать Дженкинсу, чтобы отключить работу, это тоже сработало бы.

Обновление: Похоже, есть пара плагинов, которые будут препятствовать запуску двух заданий одновременно, но мне действительно нужно:

  1. Запуск задания А, которое отключает задание 1
  2. Делать что-то вне Дженкинса, основываясь на результатах задания A
  3. Выполнить задание B, которое снова разрешает задание 1

Ответы [ 6 ]

25 голосов
/ 29 декабря 2011

Вы можете выполнить скрипт Groovy в качестве шага предварительной сборки.Я делал это пару раз в моей компании.Вы должны установить плагин Groovy .Затем вы можете добавить шаг предварительной сборки «Выполнить системный скрипт» и там можно выполнить что-то вроде этого:

Jenkins.instance.getItem("jobname").disable()

Для включения заданий после сборки добавьте шаг после сборки и выполните

Jenkins.instance.getItem("jobname").enable()

Если вам нужно задание, которое включает или отключает только другие задания сборки, то вы выбираете не этапы до или после сборки, а обычный этап сборки с системным скриптом Groovy.

Выможно сделать еще много мыслей с помощью скриптов Groovy.Об этом стоит прочитать подробнее.

7 голосов
/ 29 декабря 2011

Я нашел один возможный подход, используя jenkins-cli (интерфейс командной строки). Я добавил этот шаг сборки (для меня это была командная команда Windows, хотя я могу сделать это скриптом или чем-то более элегантным):

java -jar C:\my\jenkins\path\jenkins-cli.jar -s %JENKINS_URL% disable-job "Job 1"

Я не изучал, как добраться до Дженкинса, но это не должно быть слишком сложно.

Вот некоторая информация о CLI . Вы также можете перейти к http://your -jenkins: 8080 / cli для некоторых доступных команд.

4 голосов
/ 29 декабря 2011

Для этого мы использовали плагин Port Allocator .Это позволяет вашим заданиям «захватывать» порт TCP на время их выполнения, что означает, что никакое другое задание не может захватить этот порт на время, эффективно блокируя параллельное выполнение двух заданий, пытающихся получить один и тот же порт.* Существует также плагин Locks and Latches , который звучит идеально, но мы обнаружили, что его сложно использовать, и он, похоже, больше не поддерживается.после уточнения вопроса:

Вы можете удаленно включить / отключить задание, используя HTTP-интерфейс Jenkins.Если вы перейдете к какому-либо заданию, то укажите в конце URL-адреса api, и вы увидите инструкции о HTTP-запросах, которые вам необходимо сделать для этого.Например: http://ci.jruby.org/job/activerecord-jdbc-master/api (посмотрите в конце этой страницы - в основном POST на <job_url>/disable).

Использовать шаг сборки в задании для вызова curl или просто.аналогично соответствующим данным запроса.

3 голосов
/ 08 апреля 2016

У меня была такая же проблема, и я решил ее с помощью ответа dunni . Мне нужно указать, что это сработало только тогда, когда я выбрал «Выполнить системный скрипт Groovy» в качестве шага сборки, если я выбрал «Выполнить Groovy» сценария ", выдает ошибку, о которой сообщает Арун Сангал :" Caught: groovy.lang.MissingPropertyException: нет такого свойства: Jenkins для класса: hudson8158411085491171644 ".

Мой Groovy-код выглядит так:

import jenkins.*
import jenkins.model.*

try {
   Jenkins.instance.getItem("jobname").disable()
} catch (Exception ex) {
   printf("Error disabling jobname. " + ex.getMessage())
}
0 голосов
/ 06 ноября 2017

Это можно сделать, используя плагин Job DSL , без указания учетных данных.

Используемый сценарий DSL будет:

job("jobname"){
    using("jobname")
    disabled(true)
}
  1. Это для работ по фристайлу. Если вам нужно отключить, например, конвейерное задание, используйте pipelineJob вместо job.
  2. Обычно "jobname" необходимо включать папки, используя корень Jenkins в качестве ссылки.
  3. Чтобы включить работу, используйте disabled(false).
0 голосов
/ 25 мая 2016

Вы можете попробовать плагин Build blocker https://wiki.jenkins -ci.org / display / JENKINS / Build + Blocker + Plugin

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...