Git push: изменения в ветке не всегда запускают Jenkins
У меня есть 3 ветки Git, master, br2 и br3. У меня есть 3 работы Дженкинса; каждый клонирует одно и то же репо, но проверяет отдельную ветку. Насколько я понимаю, с помощью следующей команды ( http://kohsuke.org/2011/12/01/polling-must-die-triggering-jenkins-builds-from-a-git-hook/) в хуке post-receive это должно вызвать Дженкинса, чтобы начать работу для ветви, на которой был сделан толчок.
curl http://smfosbuild:8080/git/notifyCommit?url=git@vfilvgit2:scmtest.git
Изменения, сделанные на br2 и выдвинутые, начнут правильную работу Дженкинса. Но подталкивание к изменениям, внесенным в master или br3, не приведет к запуску ассоциированных заданий.
У меня также активирован триггер электронной почты, и я получаю электронное письмо для всех нажатий с указанием правильной ветви. Таким образом, хук post-receive получает правильную информацию о ветке, которая изменилась. Любые идеи, моя команда выше неверна или есть какие-то настройки в моем конфиге Jenkins, которые мне не хватает?
2 ответа
Что ж, для того, чтобы исследовать эту проблему, мне нужно изучить вашу установку GIT и Jenkins. Но я могу предложить более простую дорогу:
В конфигурации проекта вы можете настроить любую сборку так, чтобы она запускалась удаленно через обычный HTTP-вызов (Job -> Configure -> Build Triggers -> Trigger builds удаленно (например, из сценариев)). Это не будет проверять какую-либо информацию о репозитории, а просто выполнит сборку, несмотря ни на что. Это действительно полезно, так как описанный вами подход также доставляет нам массу неприятностей. Итак, имея этот в post-receive
хук, мы просто называем URL с именем работы в нем так:
JENKINS_URL/job/Our$20Project%20-%20${BRANCH_NAME}/build?token=TOKEN_NAME
Название ветви - это название ветви, очевидно.
Позже, когда я взял на себя эту сборку, я внес изменение, чтобы использовать только один проект для всех ветвей и передать имя ветви в качестве параметра. Ветвь добавляется к имени сборки (мы больше не используем числа), и это намного более простое и более гибкое решение. Но это не подойдет всем.
Если вы хотите, я могу предоставить вам исходный код post-receive
хук, но это действительно легко написать - мы сделали это на основе пост-получения электронной почты, доступной в источниках Git.
Знаете ли вы, что даже если вы используете метод уведомления, описанный в блоге Kohsuke, вам нужно настроить опрос для этой работы? Интервал опроса может быть чем-то большим, например, "@daily", но он должен быть там, потому что уведомление используется только для запуска немедленного опроса.
Кроме того, ваша работа должна использовать репозиторий git "git@vfilvgit2:scmtest.git". Пожалуйста, проверьте, что вы не используете ssh://git@vfilvgit2/scmtest.git.