Jenkins shared library: почему stack trace указывает на `vars/`, а не на Jenkinsfile
Как читать ошибки Jenkins Pipeline из shared library: `vars/`, `src/`, CPS stack trace, sandbox и что объяснять автору MR вместо пересылки raw console log.
В Jenkins Pipeline shared library помогает не копировать один и тот же Groovy между репозиториями. Но когда pipeline падает, stack trace часто указывает не на Jenkinsfile, а на файл в vars/ или src/ общей библиотеки.
Для автора MR это выглядит странно: «я поменял одну строку в приложении, почему ошибка в shared library?»
Коротко: что такое shared library
Shared library — общий Groovy-код для Jenkins Pipeline. Папка vars/ обычно содержит удобные pipeline steps вроде buildDockerImage(), а src/ — классы и вспомогательную логику. Jenkinsfile вызывает эти функции, но ошибка может произойти внутри библиотеки.
Почему stack trace путает
1. Ошибка в параметрах. Jenkinsfile передал null или неправильный map, а упало внутри vars/deploy.groovy.
2. Ошибка в самой библиотеке. Обновили shared library, и старый Jenkinsfile стал несовместим.
3. CPS stack trace шумит. Jenkins преобразует pipeline-код, поэтому trace содержит внутренние вызовы, которые не помогают новичку.
4. Sandbox блокирует метод. Ошибка выглядит как проблема кода, но причина в Script Security approvals.
5. Версия library не та. Репозиторий может использовать branch/tag библиотеки, отличный от ожидаемого.
Что смотреть
- Какая версия shared library подключена.
- Какая функция из
vars/вызвана в Jenkinsfile. - Какие параметры переданы.
- Первая прикладная строка stack trace до внутренних Jenkins/CPS вызовов.
- Есть ли sandbox/security approval errors.
Мини-пример
@Library('company-ci@v3') _
pipeline {
stages {
stage('Build') {
steps {
buildDockerImage(imageName: env.IMAGE_NAME)
}
}
}
}
Если IMAGE_NAME пустой, stack trace может указывать на vars/buildDockerImage.groovy, но первичная причина — параметр из Jenkinsfile или окружения.
Где тут Exlogare
Raw Jenkins console log часто слишком шумный для автора MR. Exlogare может получить console output, найти прикладной фрагмент stack trace и вернуть короткий RCA: «shared library step получил пустой imageName; проверьте env/parameters». Подключение описано в Jenkins ingest.
Читайте также
- Self-hosted runner vs shared runner: что меняется в логах CI
- Артефакты и логи CI: что хранить, а что нельзя класть в S3 как есть
Чеклист
- Найдите версию shared library.
- Отличите ошибку параметров от ошибки библиотеки.
- Игнорируйте внутренний CPS-шум до первой полезной строки.
- Проверьте sandbox approvals.
- Дайте автору MR короткий RCA, а не весь console log.