Introdução
Um Pipeline Multibranch do Jenkins analisa um repositório de controle de versão, identifica os branches que contêm um Jenkinsfile e cria um job de Pipeline para cada um deles. Isso permite que o branch main e os branches de funcionalidade (feature branches) utilizem suas próprias definições de Pipeline, mantendo-se sob um único projeto pai.
Neste laboratório, você preparará um pequeno repositório Git local com dois branches, criará um Pipeline Multibranch a partir do painel do Jenkins, analisará o repositório e comparará a saída do console de cada branch descoberto.
Preparar um repositório Git com dois branches
Nesta etapa, você preparará um pequeno repositório Git que o Jenkins possa analisar. O repositório reside dentro do contêiner do Jenkins, para que o controlador do Jenkins possa acessá-lo sem depender do GitHub ou de outro serviço externo.
Execute este comando no terminal para criar o branch main com um 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"
'
Agora, crie um branch feature/demo com uma mensagem de Pipeline diferente e publique ambos os branches em um repositório 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
'
Registre os branches que o Jenkins irá analisar:
docker exec jenkins git --git-dir=/var/jenkins_home/multibranch-demo.git branch -a | tee /home/labex/project/multibranch-branches.txt
Você deverá ver ambos os branches:
feature/demo
* main
Criar um projeto de Pipeline Multibranch
Nesta etapa, você criará um projeto de Pipeline Multibranch a partir do painel do Jenkins. O projeto analisará git://localhost/multibranch-demo.git e buscará um arquivo chamado Jenkinsfile em cada branch.
Abra a interface da área de trabalho. O Firefox abre o Jenkins automaticamente. Se não abrir, acesse http://localhost:8080.
No painel do Jenkins:
Clique em New Item, digite multibranch-demo, selecione Multibranch Pipeline e clique em OK.
Na página de configuração:
Em Branch Sources, clique em Add source e selecione Git.
Preencha a fonte Git com estes valores:
Project Repository:git://localhost/multibranch-demo.gitCredentials:- none -
Mantenha Behaviors com o comportamento padrão de descoberta de branches. Em Build Configuration, mantenha Mode como by Jenkinsfile e Script Path como Jenkinsfile.
Clique em Save.

Execute este comando para registrar a configuração salva importante:
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
Analisar os branches do repositório
Nesta etapa, você executará a indexação de branches a partir do painel do Jenkins. A indexação de branches analisa o repositório Git, encontra os branches com um Jenkinsfile e cria jobs filhos para esses branches.
Na página do projeto multibranch-demo, clique em Scan Multibranch Pipeline Now.
Aguarde até que a página exiba os jobs filhos para main e feature/demo. O Jenkins também pode iniciar automaticamente a primeira compilação para cada branch descoberto.

Execute este comando para registrar os jobs filhos descobertos:
curl -fsS http://localhost:8080/job/multibranch-demo/api/json | grep -o '"name":"[^"]*"' | tee /home/labex/project/multibranch-discovered-jobs.txt
A saída deve incluir ambos os jobs de branch:
"name":"main"
"name":"feature%2Fdemo"
Verificar as compilações dos branches
Nesta etapa, você confirmará que o Jenkins consegue compilar cada branch descoberto. Um Pipeline Multibranch mantém cada branch como seu próprio job de Pipeline filho.
Abra o job do branch main a partir da página multibranch-demo. Se uma compilação já estiver em execução, aguarde a conclusão. Se ainda não houver uma compilação, clique em Build Now.
Retorne ao multibranch-demo, abra o job do branch feature/demo e faça o mesmo.
Ambos os jobs de branch devem ter uma última compilação bem-sucedida.

Execute este comando para registrar a última compilação bem-sucedida de cada branch:
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
Você deverá ver:
main: SUCCESS
feature/demo: SUCCESS
Comparar a saída do Pipeline dos branches
Nesta etapa, você comparará a saída do console das compilações dos dois branches. O branch main e o branch feature/demo usam mensagens diferentes em seus Jenkinsfiles, portanto, os logs provam que o Jenkins executou o Pipeline específico de cada branch corretamente.
Abra a última compilação do branch main e clique em Console Output. Ela deve exibir Running main branch pipeline.
Em seguida, abra a última compilação do branch feature/demo e clique em Console Output. Ela deve exibir Running feature demo pipeline.

Execute este comando para salvar a mesma evidência do console:
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
Resumo
Você preparou um repositório Git local com dois branches, criou um Pipeline Multibranch do Jenkins a partir do painel, analisou o repositório, confirmou que ambos os jobs de branch foram compilados com sucesso e comparou a saída do Pipeline específica de cada branch.