Введение
Jenkins Multibranch Pipeline сканирует репозиторий системы контроля версий, находит ветки, содержащие файл Jenkinsfile, и создает отдельное задание конвейера (Pipeline job) для каждой из них. Это позволяет веткам main и feature-веткам использовать собственные определения конвейера, оставаясь при этом частью одного родительского проекта.
В этой лабораторной работе вы подготовите небольшой локальный Git-репозиторий с двумя ветками, создадите Multibranch Pipeline в панели управления Jenkins, просканируете репозиторий и сравните вывод консоли для каждой обнаруженной ветки.
Подготовка Git-репозитория с двумя ветками
На этом этапе вы подготовите небольшой Git-репозиторий, который сможет просканировать Jenkins. Репозиторий будет находиться внутри контейнера Jenkins, чтобы контроллер Jenkins мог получить к нему доступ без необходимости использования GitHub или других внешних сервисов.
Выполните эту команду в терминале, чтобы создать ветку main с файлом Jenkinsfile:
docker exec jenkins bash -lc '
set -e
rm -rf /var/jenkins_home/multibranch-src /var/jenkins_home/multibranch-demo.git
mkdir -p /var/jenkins_home/multibranch-src
cd /var/jenkins_home/multibranch-src
git init -b main
git config user.email "jenkins@example.com"
git config user.name "Jenkins Multibranch"
cat > Jenkinsfile <<'"'"'EOF'"'"'
pipeline {
agent any
stages {
stage("Branch Info") {
steps {
echo "Running main branch pipeline"
sh "echo BRANCH_NAME=${BRANCH_NAME}"
}
}
}
}
EOF
git add Jenkinsfile
git commit -m "Add main branch Jenkinsfile"
'
Теперь создайте ветку feature/demo с другим сообщением в конвейере, а затем опубликуйте обе ветки в bare-репозиторий:
docker exec jenkins bash -lc '
set -e
cd /var/jenkins_home/multibranch-src
git checkout -b feature/demo
sed -i "s/Running main branch pipeline/Running feature demo pipeline/" Jenkinsfile
git add Jenkinsfile
git commit -m "Customize feature branch Jenkinsfile"
git init --bare --initial-branch=main /var/jenkins_home/multibranch-demo.git
git remote add origin /var/jenkins_home/multibranch-demo.git
git push origin main
git push origin feature/demo
touch /var/jenkins_home/multibranch-demo.git/git-daemon-export-ok
if [ -f /tmp/multibranch-git-daemon.pid ]; then
kill "$(cat /tmp/multibranch-git-daemon.pid)" 2>/dev/null || true
rm -f /tmp/multibranch-git-daemon.pid
fi
git daemon --reuseaddr --base-path=/var/jenkins_home --export-all --detach --pid-file=/tmp/multibranch-git-daemon.pid /var/jenkins_home
'
Запишите ветки, которые будет сканировать Jenkins:
docker exec jenkins git --git-dir=/var/jenkins_home/multibranch-demo.git branch -a | tee /home/labex/project/multibranch-branches.txt
Вы должны увидеть обе ветки:
feature/demo
* main
Создание проекта Multibranch Pipeline
На этом этапе вы создадите проект Multibranch Pipeline через панель управления Jenkins. Проект будет сканировать git://localhost/multibranch-demo.git и искать файл с именем Jenkinsfile в каждой ветке.
Откройте интерфейс рабочего стола. Firefox автоматически откроет Jenkins. Если этого не произошло, перейдите по адресу http://localhost:8080.
В панели управления Jenkins:
Нажмите New Item, введите multibranch-demo, выберите Multibranch Pipeline и нажмите OK.
На странице конфигурации:
В разделе Branch Sources нажмите Add source и выберите Git.
Заполните данные источника Git следующими значениями:
Project Repository:git://localhost/multibranch-demo.gitCredentials:- none -
Оставьте Behaviors с настройками обнаружения веток по умолчанию. В разделе Build Configuration оставьте Mode как by Jenkinsfile, а Script Path — как Jenkinsfile.
Нажмите Save.

Выполните эту команду, чтобы сохранить важные параметры конфигурации:
docker exec jenkins sh -lc "grep -n -E 'WorkflowMultiBranchProject|git://localhost/multibranch-demo.git|<scriptPath>Jenkinsfile</scriptPath>' /var/jenkins_home/jobs/multibranch-demo/config.xml" | tee /home/labex/project/multibranch-config-lines.txt
Сканирование веток репозитория
На этом этапе вы запустите индексацию веток из панели управления Jenkins. Индексация веток сканирует Git-репозиторий, находит ветки с файлом Jenkinsfile и создает дочерние задания для этих веток.
На странице проекта multibranch-demo нажмите Scan Multibranch Pipeline Now.
Подождите, пока на странице не появятся дочерние задания для main и feature/demo. Jenkins может также автоматически запустить первую сборку для каждой обнаруженной ветки.

Выполните эту команду, чтобы записать обнаруженные дочерние задания:
curl -fsS http://localhost:8080/job/multibranch-demo/api/json | grep -o '"name":"[^"]*"' | tee /home/labex/project/multibranch-discovered-jobs.txt
Вывод должен включать оба задания для веток:
"name":"main"
"name":"feature%2Fdemo"
Проверка сборок веток
На этом этапе вы подтвердите, что Jenkins может собирать каждую обнаруженную ветку. Multibranch Pipeline сохраняет каждую ветку как отдельное дочернее задание Pipeline.
Откройте задание ветки main со страницы multibranch-demo. Если сборка уже выполняется, дождитесь её завершения. Если сборки еще нет, нажмите Build Now.
Вернитесь к multibranch-demo, откройте задание ветки feature/demo и сделайте то же самое.
Оба задания веток должны иметь успешную последнюю сборку.

Выполните эту команду, чтобы записать результат последней успешной сборки для каждой ветки:
python3 - <<'PY' | tee /home/labex/project/multibranch-build-results.txt
import json
import urllib.request
for url_name, display in [('main', 'main'), ('feature%252Fdemo', 'feature/demo')]:
with urllib.request.urlopen(f'http://localhost:8080/job/multibranch-demo/job/{url_name}/lastBuild/api/json') as response:
data = json.load(response)
print(f'{display}: {data["result"]}')
PY
Вы должны увидеть:
main: SUCCESS
feature/demo: SUCCESS
Сравнение вывода конвейера веток
На этом этапе вы сравните вывод консоли двух сборок веток. Ветки main и feature/demo используют разные сообщения в своих файлах Jenkinsfile, поэтому логи доказывают, что Jenkins выполнил правильный конвейер для конкретной ветки.
Откройте последнюю сборку ветки main и нажмите Console Output. Там должно быть сообщение Running main branch pipeline.
Затем откройте последнюю сборку ветки feature/demo и нажмите Console Output. Там должно быть сообщение Running feature demo pipeline.

Выполните эту команду, чтобы сохранить подтверждение из консоли:
curl -fsS http://localhost:8080/job/multibranch-demo/job/main/lastBuild/consoleText | grep 'Running main branch pipeline' | tee /home/labex/project/multibranch-console-lines.txt
curl -fsS http://localhost:8080/job/multibranch-demo/job/feature%252Fdemo/lastBuild/consoleText | grep 'Running feature demo pipeline' | tee -a /home/labex/project/multibranch-console-lines.txt
Итоги
Вы подготовили локальный Git-репозиторий с двумя ветками, создали Jenkins Multibranch Pipeline через панель управления, просканировали репозиторий, подтвердили успешную сборку обоих заданий веток и сравнили вывод конвейера для каждой ветки.