Как я могу запустить сборку конвейера Jenkins из репозитория без jenkinsfile?

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

Что я хочу сделать, так это создать несколько файлов Jenkins, каждый из которых настраивает и создает библиотеку Qt для разных целей, или запускает разные дополнительные сценарии.
Все эти файлы Jenkins будут собраны в другом репозитории.

Теперь моя проблема заключается в том, как создать задание конвейера, которое запускается, как только в репозиторий Qt вносятся изменения, но использует Jenkinsfile из другого репозитория.

Исследования оставили меня - насколько я вижу и согласно эти posts - с двумя вариантами:

  • Добавление обоих репозиториев в раздел «Определение» — примерно так:
    введите здесь описание изображения К сожалению, это не работает для меня, так как обоим репозиториям по-прежнему нужен Jenkinsfile. Кроме того, я не могу указать разные ветки для каждого репозитория, поэтому я не могу слушать конкретную ветку версии Qt.

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

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


person T3 H40    schedule 13.12.2016    source источник
comment
Вы можете вставить код вместо кассы scm   -  person Rik    schedule 27.12.2016


Ответы (3)


Почему бы вам не создать Jenkins Freestyle Job, который отслеживает репозиторий QT, используя обычный метод «Poll SCM»?

Затем пусть это задание Freestyle запустит одно или несколько заданий конвейера Jenkins.

Вы бы указали задания конвейера на SCM, где живут сценарии groovy конвейера "jenkinsFile" (репозитории, которыми вы управляете).

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

Вы можете передать URL-адрес и версию репозитория Qt в конвейер в качестве параметра задания опроса.

person macg33zr    schedule 13.12.2016
comment
Да, это то, что я тоже разработал, как я описал в своем вопросе. Я хотел знать, есть ли более элегантное решение, которого в настоящее время, похоже, нет. Пройти доработку - полезная идея, о которой я еще не задумывался, так что +1. - person T3 H40; 13.12.2016
comment
Извините, пропустил второй пункт. Согласитесь - более изящное решение этого пайплайна в DSL или конфигурации было бы лучше. - person macg33zr; 15.12.2016

Вы думали о веб-хуке, который запускает задание Jenkins с вашего сервера Git? Таким образом, вы можете заставить произвольные репозитории запускать вашу сборку и уменьшать трафик на сервере Git, вызванный периодическим опросом от Jenkins.

Принцип заключается в том, что Jenkins предоставляет URL для вашей сборки задание (например, http://your-jenkins.domain/job/JOBNAME/build?token=TOKEN), которое запускает ваше задание. С другой стороны, Git может зарегистрировать так называемый хук который срабатывает всякий раз, когда делается отправка в репозиторий. Добавление HTTP-запроса к вашему Git-хуку будет запускать задание Jenkins каждый раз, когда кто-то отправляет данные в ваш репозиторий.

В этом сообщении SO объясняется, как настроить такой хук с любым Git сервер. Также есть руководства по Gitlab. и Github.

person Michael Lihs    schedule 03.01.2017
comment
Спасибо, я посмотрю на это поближе, как только мой отпуск закончится. Однако, на первый взгляд, проблема, которую я вижу, заключается в том, что все хуки хранятся в подкаталоге hooks каталога Git. Как я уже упоминал (вероятно, недостаточно хорошо), я не имею никакого влияния на цель репо. - person T3 H40; 03.01.2017
comment
Я еще раз посмотрел на это, но, как я уже сказал, боюсь, что это не сработает для меня. Я не имею никакого влияния на рассматриваемое репо, поэтому я не могу добавить в него git-хук. Я подумал о том, чтобы, возможно, создать репозиторий с репозиторием, который я хочу прослушать в качестве подмодуля, и установить там какую-то форму post-commit hook для подмодуля, но, насколько я понимаю, поскольку подмодули работают в режиме отдельного HEAD, содержащий репо не будет получать уведомления о внешних изменениях в подмодуле. Короче говоря, это хорошо написанный ответ, но, к сожалению, не решает мою проблему. - person T3 H40; 09.01.2017

Вы можете настроить триггер сборки для проверки наличия изменений в репозитории: Триггер сборки -> Опрос SCM. Там вы можете настроить расписание:

Например, * * * * * для проверки каждую минуту или H * * * * для проверки ежечасно.

person SevenEleven    schedule 13.12.2016
comment
Конечно, но это будет опрашивать только те репозитории, которые установлены в разделе конвейера, что видно на снимке экрана выше. У меня нет возможности выбрать конкретный репозиторий для опроса, и проблемы, описанные выше, все еще актуальны. Я не получаю раздел Source-Code-Management в конвейерной работе, который я получил бы в свободной работе. - person T3 H40; 13.12.2016