Введение
Общие библиотеки Jenkins (Shared Libraries) позволяют командам повторно использовать код Pipeline во множестве заданий. Стандартная структура библиотеки предполагает размещение простых пользовательских шагов в каталоге vars/. После этого Pipeline может загрузить библиотеку и вызывать эти шаги как обычные функции Pipeline.
В этой лабораторной работе вы подготовите локальную общую библиотеку с файлом vars/sayHello.groovy, зарегистрируете её как Global Pipeline Library в панели управления Jenkins, создадите задание Pipeline, которое вызывает sayHello, и проверите результат выполнения в Jenkins.
Подготовка репозитория общей библиотеки
На этом этапе вы подготовите локальный Git-репозиторий для общей библиотеки Jenkins. Каталог vars/ является особенным: каждый файл .groovy в нем становится шагом Pipeline с тем же именем.
Выполните эту команду, чтобы создать vars/sayHello.groovy внутри контейнера Jenkins:
docker exec jenkins bash -lc '
set -e
rm -rf /var/jenkins_home/shared-lib-src /var/jenkins_home/shared-lib.git
mkdir -p /var/jenkins_home/shared-lib-src/vars
cd /var/jenkins_home/shared-lib-src
git init -b main
git config user.email "jenkins@example.com"
git config user.name "Jenkins Shared Library"
cat > vars/sayHello.groovy <<'"'"'EOF'"'"'
def call(String name = "LabEx") {
echo "Shared library says hello to ${name}"
}
EOF
git add vars/sayHello.groovy
git commit -m "Add sayHello shared library step"
'
Теперь опубликуйте репозиторий как локальный «голый» (bare) Git-репозиторий и откройте к нему доступ через git://localhost/shared-lib.git:
docker exec jenkins bash -lc '
set -e
cd /var/jenkins_home/shared-lib-src
git init --bare --initial-branch=main /var/jenkins_home/shared-lib.git
git remote add origin /var/jenkins_home/shared-lib.git
git push origin main
touch /var/jenkins_home/shared-lib.git/git-daemon-export-ok
if [ -f /tmp/shared-lib-git-daemon.pid ]; then
kill "$(cat /tmp/shared-lib-git-daemon.pid)" 2>/dev/null || true
rm -f /tmp/shared-lib-git-daemon.pid
fi
git daemon --reuseaddr --base-path=/var/jenkins_home --export-all --detach --pid-file=/tmp/shared-lib-git-daemon.pid /var/jenkins_home
'
Запишите ветку репозитория, которую будет использовать Jenkins:
docker exec jenkins git ls-remote git://localhost/shared-lib.git refs/heads/main | tee /home/labex/project/shared-library-repository.txt
Вывод должен содержать refs/heads/main.
Регистрация Global Pipeline Library
На этом этапе вы зарегистрируете репозиторий как глобальную библиотеку Jenkins под названием labex-shared-lib. Pipeline сможет загрузить её с помощью директивы @Library.
Откройте интерфейс рабочего стола. Firefox автоматически откроет Jenkins. Если этого не произошло, перейдите по адресу http://localhost:8080.
В панели управления Jenkins:
Нажмите Manage Jenkins (Управление Jenkins), затем выберите System (Система).
Прокрутите страницу до раздела Global Trusted Pipeline Libraries или Global Pipeline Libraries. Нажмите Add (Добавить).
Заполните поля библиотеки следующими значениями:
Name:labex-shared-libDefault version:main- Установите флажок
Allow default version to be overridden - Оставьте
Load implicitlyневыбранным Retrieval method:Modern SCMSource Code Management:GitProject Repository:git://localhost/shared-lib.gitCredentials:- none -
Нажмите Save (Сохранить).

Выполните эту команду, чтобы сохранить конфигурацию библиотеки:
docker exec jenkins sh -lc "grep -n -E '<name>labex-shared-lib</name>|git://localhost/shared-lib.git|<defaultVersion>main</defaultVersion>' /var/jenkins_home/org.jenkinsci.plugins.workflow.libs.GlobalLibraries.xml" | tee /home/labex/project/shared-library-config-lines.txt
Создание Pipeline, загружающего библиотеку
На этом этапе вы создадите задание Pipeline с именем shared-library-demo. Pipeline будет загружать labex-shared-lib и вызывать пользовательский шаг sayHello('LabEx') из файла vars/sayHello.groovy.
В панели управления Jenkins:
Нажмите New Item (Создать задание), введите shared-library-demo, выберите Pipeline, затем нажмите OK.
Прокрутите до раздела Pipeline. Оставьте Definition как Pipeline script.
Введите следующий скрипт:
@Library('labex-shared-lib@main') _
node {
stage('Use Library') {
sayHello('LabEx')
}
}
Нажмите Save (Сохранить).

Выполните эту команду, чтобы сохранить скрипт Pipeline:
docker exec jenkins sh -lc "grep -n -E '@Library|sayHello' /var/jenkins_home/jobs/shared-library-demo/config.xml" | tee /home/labex/project/shared-library-job-config.txt
Запуск Pipeline с общей библиотекой
На этом этапе вы запустите задание Pipeline. Jenkins получит общую библиотеку из локального Git-репозитория, загрузит vars/sayHello.groovy и выполнит пользовательский шаг.
На странице задания shared-library-demo нажмите Build Now (Собрать сейчас).
Когда сборка #1 появится в истории, дождитесь её завершения. Успешная сборка означает, что Jenkins успешно загрузил библиотеку и выполнил скрипт Pipeline.

Выполните эту команду, чтобы сохранить результат сборки:
curl -fsS http://localhost:8080/job/shared-library-demo/1/api/json | tr ',' '\n' | grep '"result":"SUCCESS"' | tee /home/labex/project/shared-library-build-result.txt
Проверка вывода общей библиотеки
На этом этапе вы проверите вывод консоли Jenkins. Ключевым доказательством является строка, выведенная файлом sayHello.groovy.
Откройте сборку #1, затем нажмите Console Output (Вывод консоли).
В консоли должно быть видно, как Jenkins загружает labex-shared-lib и выводит:
Shared library says hello to LabEx

Выполните эту команду, чтобы сохранить подтверждение из консоли:
curl -fsS http://localhost:8080/job/shared-library-demo/1/consoleText | grep 'Shared library says hello to LabEx' | tee /home/labex/project/shared-library-console-lines.txt
Резюме
Вы подготовили репозиторий общей библиотеки Jenkins, зарегистрировали его как Global Pipeline Library через панель управления, создали задание Pipeline, которое загружает эту библиотеку, и убедились в успешном выполнении пользовательского шага из каталога vars/ по выводу в консоли Jenkins.