2013-12-20 4 views
6

Моя ситуация следующая: У меня три ветви в репо: мастер, разработчик и постановка. И у меня есть одна работа для каждой из этих ветвей, настроенная в разделе «Ветки для сборки» в Дженкинсе. происхождение/мастер, происхождение/dev, происхождение/постановка.Можно ли запустить Jenkins только из одной конкретной ветки?

Bitbucket запускает задание для создания всякий раз, когда в репозиторий происходят изменения через крюк репозитория. (https://confluence.atlassian.com/display/BITBUCKET/Jenkins+hook+management).

Однако, когда я нажимаю на мастер, все задания начинают строить, и то же самое с двумя другими.

Я хочу, чтобы работа «хозяина» Дженкинса строилась только тогда, когда я нажимаю на мастер-ветку. Дженкинс "dev" задание на ветку dev. Дженкинс «организует» работу по дестабилизации.

Есть ли способ контролировать это поведение?

ответ

4

Я только что обнаружил, что Bitbucket не позволяет выбрать конкретный крюк при нажатии на любую ветку. Он просто называет все крючки, затем запускает все задания Дженкинса.

Мое решение состояло в том, чтобы создать на моем компьютере определенный файл, на котором установлен Jenkins, и установить к нему этот бит Bitbucket. (например, http: // {jenkins url}: {apache port} /check.php)

Обратите внимание, что этот порт Apache отличается от Jenkins ', но Apache's. В моем случае Jenkins работал на 8080 и Apache на 7777. Он сделал это, чтобы запустить php-скрипт, но не в каталоге Jenkins.

Поскольку крюк Bitbucket отправляет json-файл, я смог проверить в check.php, на какую ветку нажали. Ссылка: POST hook management

После проверки с помощью простой «если», я только что назвал правильный URL, чтобы начать правильную работу с exec_curl, как:

$ ч = curl_init();
curl_setopt ($ ch, CURLOPT_URL, http: // {jenkins url}: {порт jenkins}/job/{имя задания}/build? Токен = {токен работы});
curl_setopt ($ ch, CURLOPT_HEADER, 0);
curl_exec ($ ch);
curl_close ($ ch);

И вуаля.

+1

Ницца, это хорошая идея, но я считаю, что Jenkins-CI должен поддерживать эту функцию некоторым плагином. – dylanninin

6

Вы настроили опрос?

https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin#GitPlugin-Pushnotificationfromrepository

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

+1

Это гораздо лучший ответ, чем принятый, IMVHO – Rondo

1

Чтобы иметь различные проекты Jenkis для различных отраслей я сделал следующее:

  • Установите Bitbucket Plugin в вашем Дженкинс
  • Добавить нормальное сообщение, как Hook в репозиторий Bitbucket (Настройки -> Крючки) и использование следующих URL:

https: // YOUR.JENKINS.SERVER: PORT/Bitbucket-крючок

  • Настройка проект Дженкинс следующим образом:
    • под запуском сборки позволяют Построить при изменении выталкивается BitBucket
    • под Управления исходного кода выберите GIT; введите учетные данные и определить Ветви построить (как ** функция/*) < - это где вы определяете различные ветви для каждого проекта

К таким образом у меня есть три сборки проектов, один для всех функций, один для разработки и один для релиза.

И лучше всего, вам не нужно добавлять новые крючки для новых проектов Jenkins.

Смежные вопросы