Дженкинс мультибрендовый конвейер с файлом Jenkins из другого хранилища
У меня есть репозиторий Git с кодом, который я хотел бы построить, но мне не разрешено добавлять Jenkinsfile
в свой корневой каталог (это пакет Debian, поэтому я не могу добавлять файлы вверх по течению источник). Есть ли способ сохранить Jenkinsfile
в одном репозитории и создать код из другого репозитория? Так как у моего репозитория кода есть несколько веток для сборки (по одному для каждого выпуска Debian), это должен быть мультибрендовый конвейер. Записи в репозиториях кода или Jenkinsfile
должны запускать сборку.
Бонусная сложность: У меня есть несколько репозиториев кода/упаковки, подобных этому, и я бы хотел использовать один и тот же Jenkinsfile
для всех. Таким образом, он должен каким-то образом динамически извлекать правильный URL Git для использования. Построенные ветки имеют одинаковые имена во всех репозиториях.
Ответы
Ответ 1
Короткий ответ: вы не можете сделать это с помощью multibranch pipeline
. Многоканальные конвейеры разрабатываются (по крайней мере, на данный момент) для выполнения конкретного конвейера в стиле Pipeline script from SCM
с фиксированным Jenkinsfile
в корне проекта.
Однако вы можете использовать плагин Multi-Branch Project, созданный для проектов с несколькими каналами фристайл. Во-первых, вам нужно определить свой multibranch freestyle configuration
так же, как и с multibranch pipeline configuration
.
Выберите этот новый элемент, как показано ниже:
![Новый проект с несколькими веткими Freestyle]()
Этот тип конфигурации будет вести себя точно так же, как тип multibranch pipeline
, т.е. создаст вам папку с именем вашей конфигурации и подпроектом для каждой автоматически обнаруженной ветки.
Затем реализация должна быть частью торта:
- Укажите репозиторий
SCM
в конфигурации с несколькими каналами
- Вызовите другую сборку как часть своей сборки/пост-сборки так же, как и в стандартном проекте фристайла, за исключением того, что вам нужно вызвать параметризованное задание (позвоните ему
build-job
) и передайте ему информацию своего репозитория, т.е. Git URL и текущая ветка (для этой цели вы можете использовать предварительно определенные переменные $GIT_URL
и $GIT_BRANCH
)
- В
build-job
просто укажите либо встроенный конвейер, либо конвейер script, извлеченный из SCM, и внутри этого script выполните проверку SCM и продолжите шаги, которые вам нужно собрать. Пример содержимого конвейера build-job
:
.
node() {
stage 'Checkout'
checkout scm: [$class: 'GitSCM', branches: [[name: '*/${GIT_BRANCH}']], userRemoteConfigs: [[url: '${GIT_URL}']]]
stage 'Build'
// Build steps...
}
Конечно, если ваши разные проекты с несколькими фильтрами нужно обрабатывать несколько иначе, вы также можете использовать промежуточные проекты (скажем build-project-A
, build-project-B
,...), которые в свою очередь вызовут общий конвейер build-job
)
Одним из основных недостатков этого решения является то, что у вас будет только одна работа, ответственная за все ваши сборки, что затрудняет отладку. В случае успеха/ошибки у вас все еще будут многоцветные проекты, которые будут синими/красными, но вам придется вернуться к вызываемому build-job
, чтобы найти реальную проблему вашей сборки.
Ответ 2
У меня версия 2.121, и вы можете сделать это двумя способами:
Способ 1
В конфигурации многоотраслевого конвейера> Конфигурация сборки> Режим> Выберите "Настраиваемый сценарий" и укажите "Файл маркера" под именем файла, который вы будете использовать для определения веток, для которых вы хотите создавать сборки.
Затем, ниже этого, в Pipeline> Definition выберите "Конвейерный скрипт из SCM" и введите информацию "SCM", чтобы найти "Jenkinsfile", содержащий скрипт, который вы хотите запустить. Он может находиться в том же репо, в котором вы находите ветки для создания заданий (если вы добавляете ту же информацию репозитория GitHub), но я не могу найти способ указать, что вы просто используете одну и ту же ветку для файла.
Способ 2
То же, что и выше, в конфигурации многоотраслевого конвейера> Конфигурация сборки> Режим> Выберите "Пользовательский сценарий" и поместите в "Файл маркера" под именем файла, который вы будете использовать для идентификации веток, для которых вы хотите иметь сборки.
Затем, ниже этого, в Pipeline> Definition выберите "Pipeline Script" и поместите немного Groovy в текстовое поле, чтобы загрузить все, что вы хотите, или запустить какой-нибудь скрипт, который уже загружен в рабочую область.
Ответ 3
Проверьте плагин многоотраслевых значений по умолчанию для конвейера. Это позволяет при построении многоотраслевого конвейера использовать Jenkinsfile по умолчанию. Из этого Jenkinsfile вы можете проверить другие репозитории, вызвать другие скрипты и т.д.