Подтвердить что ты не робот

Может ли мастер-дженкинс выполнять задания на удаленных дженкинсах?

Мы переходим с CruiseControl.NET в Jenkins, чтобы быть в синхронизации с партнером, поэтому у нас нет двух разных сценариев CI. Мы пытаемся настроить Jenkins на то, чтобы сделать что-то похожее на то, что мы делали CruiseControl, на котором централизованный сервер вызывал проекты (задания в jenkins) на удаленных машинах сборки.

У нас есть несколько машин для сборки, связанных с одним проектом, поэтому, когда мы строим проект с централизованного CI-сервера, он будет вызывать проекты на удаленных серверах CI. Удаленные серверы CI вытащили версию из централизованного проекта сервера CI.

В управлении CruiseCruise мы настраиваем проект, который будет выполнять forceBuild для удаленных проектов. Проекты на машинах сборки использовали remoteProjectLabeller для получения номера версии, чтобы они всегда находились в синхронизации.

Чтобы получить номер главной сборки:

<labeller type="remoteProjectLabeller">
  <project>MainProject</project>
  <serverUri>tcp://central-server:21234/CruiseManager.rem</serverUri>
</labeller>

Чтобы вызвать удаленные проекты:

<forcebuild>
    <project>RemoteBuildMachineA</project>
    <serverUri>tcp://remote-server:21234/CruiseManager.rem</serverUri>
    <integrationStatus>Success</integrationStatus>
</forcebuild>

До сих пор в jenkins я настраивал вторичный сервер как подчиненный, используя веб-запуск java, но я не знаю, как бы я хотел, чтобы мастера jenkins вызывали настройки проектов на ведомых устройствах.

Могу ли я настроить Jenkins для вызова проектов (заданий) на ведомых устройствах?

Могу ли я заставить подчиненные вывести номер версии из мастера?

EDIT -

Позвольте мне добавить дополнительную информацию.

  • Ведущие и подчиненные устройства удаленной сборки работают под управлением Windows.
  • У нас был центральный мастер CruiseControl, который запускал удаленные проекты одновременно, поэтому они работали одновременно и хотели бы иметь то же самое с дженкинсами, если это возможно.
4b9b3361

Ответ 1

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

Ответ 2

В Jenkins невозможно запустить сборку на подчиненном устройстве, то есть там, где запуск сборки не контролируется тем, кто ее запускает. Он контролируется настройками самой работы. Каждое задание имеет параметр "Ограничить, где это задание может работать".

В вашем случае у вас, вероятно, будет два задания: A и B. A будет ограничено для запуска на "master", а B будет настроен для работы на "slavename". Тогда все, что осталось сделать, это заставить A вызвать B.

Но у вас были дополнительные ограничения: вы хотите, чтобы A и B проверяли ту же версию из управления версиями, и вы хотите, чтобы A и B выполнялись параллельно. Существует много способов сделать это, но проще всего определить задание с несколькими конфигурациями.

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

  • Выберите новое задание
  • Выберите "Создать новый проект с несколькими конфигурациями". Добавить имя.
  • В разделе "Матрица конфигурации" откройте "Добавить ось".
  • Выберите Slaves
  • Проверьте мастер и ведомый
  • Добавьте информацию о шаге SCM и о его создании.

Когда задание выполняется, оно выполняется как на главном, так и на ведомом. Дженкинс уверен, что они построены из одной исходной версии.

Ответ 3

Из URL/jenkins/computer вы можете добавлять, удалять и перенастраивать "узлы", которые являются локальными или удаленными "агентами сборки".

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

Ответ 4

Я думал о Дженкинсе слишком сильно, как CruiseControl, где задание задано на удаленной машине. Таким образом, в Jenkins удаленные проекты определяются на ведущем и делегируются удаленной машине через агента.

Я использовал агент Java Web Start, установленный как служба Windows на удаленных компьютерах. Чтобы определенные задания выполнялись на определенных удаленных машинах, я определил каждый удаленный node с уникальной меткой в ​​своей подчиненной конфигурации. Чтобы связать определенные задания с конкретными подчиненными устройствами, я использовал ведомую метку в каждой конфигурации задания ( "Ограничить, где этот проект может быть запущен" ).

Чтобы запускать задания с одним основным заданием, я создал бесплатное задание стиля, которое настроено только на "Построение других проектов", и предоставило список разделенных запятыми или имена проектов. Это задание параллельно создает параллельные задания.

Я все еще ищу способ отправить номер сборки мастера в нисходящие задания, чтобы всегда синхронизировать их. (Это используется для версий DLL и т.д.)