Автоматизация Jenkins: CLI, REST API и script console

Рейтинг: 70.2% · 15 голосов
Подробный курс по Jenkins и CI/CD: установка и настройка, плагины и Configuration as Code, конвейеры (pipeline) и Jenkinsfile, declarative и scripted, агенты, Docker и Kubernetes, общие библиотеки на Groovy, безопасность и credentials, интеграции (SonarQube, артефакты), траблшутинг. Актуально на 2026.
Ответить
Аватара пользователя
Andrey_CICD
Сообщения: 47
Зарегистрирован: 11 май 2026, 05:31

Автоматизация Jenkins: CLI, REST API и script console

Сообщение Andrey_CICD »

Оглавление курса (47)
  1. Что такое Jenkins и зачем нужен CI/CD
  2. Jenkins в 2026: версии, экосистема и сравнение с GitLab CI и GitHub Actions
  3. Архитектура Jenkins: контроллер, агенты, узлы и исполнители
  4. Установка Jenkins: пакеты, Docker и Kubernetes
  5. Первичная настройка Jenkins: мастер, плагины, пользователи
  6. Плагины Jenkins: установка, обновление и ключевой набор
  7. Configuration as Code (JCasC): настройка Jenkins декларативно
  8. Конвейеры Jenkins и Jenkinsfile: pipeline as code
  9. Scripted против Declarative: два синтаксиса конвейера
  10. Структура конвейера: node, stage, steps и первый pipeline
  11. Генератор сниппетов, запуск конвейера и Replay
  12. Типы заданий Jenkins: Freestyle, Pipeline, Multibranch и Organization
  13. Декларативный конвейер: структура pipeline, agent, stages
  14. agent, environment и переменные в конвейере
  15. tools, options, parameters и triggers в декларативном конвейере
  16. stages, parallel и matrix: организация этапов
  17. Условное выполнение when и блок post
  18. Триггеры сборки: webhook от GitHub, SCM polling и расписание
  19. Параметры сборки и пользовательский ввод
  20. Управление потоком: timeout, retry, sleep и waitUntil
  21. Параллелизм и блокировки: parallel, lock, milestone
  22. Постобработка и уведомления о результате сборки
  23. Groovy для Jenkins: основы скриптового конвейера
  24. Скриптовый конвейер: логика, циклы и функции
  25. Общие библиотеки Jenkins: Shared Libraries
  26. Подключение и загрузка общих библиотек
  27. Шаги оболочки: sh, bat, powershell и коды возврата
  28. Переменные среды, withEnv и рабочие пространства
  29. Работа с файлами, артефактами и отпечатками
  30. Сборка проектов в конвейере: Maven, Gradle, npm
  31. Качество кода: SonarQube и покрытие тестами
  32. Управление артефактами: публикация в Nexus и Artifactory
  33. Docker в Jenkins: образы как агенты сборки
  34. Сборка и публикация Docker-образов из конвейера
  35. Jenkins в Kubernetes: динамические pod-агенты
  36. Развёртывание в Kubernetes из конвейера
  37. Безопасность Jenkins: аутентификация и матрица прав
  38. Учётные данные Jenkins: credentials в конвейере
  39. Безопасность сценариев: Groovy sandbox и Vault
  40. Уведомления и отчёты: email, Slack, Telegram, HTML
  41. Blue Ocean и интерфейс Jenkins в 2026
  42. Автоматизация Jenkins: CLI, REST API и script console (вы здесь)
  43. Поиск и устранение неисправностей: читаем логи конвейера
  44. Типичные ошибки конвейера: сериализация и неутверждённый код
  45. Эксплуатация Jenkins: бэкап, обновление, масштабирование
  46. Конвертация и миграция: от Freestyle к Jenkinsfile
  47. Итог: сквозной CI/CD конвейер и Jenkins против альтернатив в 2026
Рано или поздно ты упрёшься в стену: кликать мышкой по веб-интерфейсу Jenkins становится невыносимо. Нужно запустить пятьдесят джоб разом, выгрузить статусы всех сборок в дашборд, дёрнуть пайплайн из своего скрипта или из соседней системы, массово поправить конфиг на сотне джоб. Через UI это часы тоскливой рутины. А ведь Jenkins CI - это в первую очередь сервер автоматизации, и сам он автоматизируется прекрасно: тремя способами, которые мы и разберём. CLI, REST API и script console - твой набор отвёрток для программного управления.

Сразу о версиях, чтобы не строить на песке. На середину 2026 актуальная ветка - Jenkins LTS 2.555.1, которая требует уже Java 21 или Java 25 (поддержка Java 17 в этой линейке закончилась). Если у тебя более старый контроллер - команды ниже всё равно работают, API стабилен годами, но держи в голове, что Jenkins живёт по плану "2+2+2" и старую Java рано или поздно выкинут.

Три способа управлять Jenkins программно

Разложим по полочкам, чтобы не путаться, какой инструмент когда брать.
  • Jenkins CLI - утилита командной строки. Удобна для скриптов на сервере и разовых административных команд: запустить джобу, перезагрузить конфиг, поставить контроллер в режим обслуживания. Работает поверх HTTP или SSH.
  • REST API - HTTP-интерфейс. Это основной мост для интеграций: получить статус сборки в JSON, триггернуть пайплайн из внешней системы, выгрузить список джоб. Любой язык, у которого есть HTTP-клиент, умеет говорить с Jenkins.
  • Script Console - выполнение Groovy прямо на контроллере. Самый мощный и самый опасный инструмент: ты получаешь полный доступ к внутренностям Jenkins. Для админки и точечных операций, которые больше никак не сделать.
Грубое правило: для интеграции снаружи бери REST API, для скриптов на хосте - CLI, а для глубокой админской хирургии - script console.

Изображение

Jenkins CLI: запуск джоб и управление

Исторически jenkins-cli.jar работал через так называемый remoting-режим. Забудь про него: из-за дыр в безопасности remoting-транспорт выпилили ещё в Jenkins 2.165. Сегодня клиент использует HTTP (по умолчанию), SSH или WebSocket. Это важная актуализация по сравнению со старыми книгами и статьями, где remoting ещё фигурирует.

Сначала качаем клиент прямо с твоего контроллера и смотрим список доступных команд:

Код: Выделить всё

# скачиваем клиент с самого Jenkins
curl -sO http://jenkins.example.com:8080/jnlpJars/jenkins-cli.jar

# список всех команд (через HTTP-транспорт, он по умолчанию)
java -jar jenkins-cli.jar -s http://jenkins.example.com:8080/ \
  -auth admin:11aabbccddeeff00112233445566778899 help
Обрати внимание на -auth: формат тут "пользователь:API-токен". Пароль в скриптах не используем, для этого в Jenkins у каждого юзера есть API-токены (Профиль -> Configure -> API Token). Запуск джобы с ожиданием результата и параметрами выглядит так:

Код: Выделить всё

# запустить джобу, дождаться окончания, прокинуть параметры
java -jar jenkins-cli.jar -s http://jenkins.example.com:8080/ \
  -auth admin:11aabbccddeeff00112233445566778899 \
  build my-deploy-job -f -v \
  -p ENV=staging -p VERSION=1.4.2
Флаг -f означает "ждать завершения сборки и вернуть её exit code", -v добавляет вывод консоли, -p передаёт параметры. Если предпочитаешь SSH-транспорт (например, ключи уже розданы), добавь -ssh -user admin, предварительно настроив SSH-доступ в Jenkins. Пара частых административных команд, которые экономят кучу времени:

Код: Выделить всё

# перечитать конфигурацию с диска (после ручной правки XML)
java -jar jenkins-cli.jar -s http://jenkins.example.com:8080/ \
  -auth admin:TOKEN reload-configuration

# мягко перезапустить - дождётся завершения текущих сборок
java -jar jenkins-cli.jar -s http://jenkins.example.com:8080/ \
  -auth admin:TOKEN safe-restart
Jenkins REST API: статус сборок и триггер с токеном

Вот где живёт вся интеграция. Главная фишка Jenkins REST API в том, что почти к любому URL веб-интерфейса можно добавить суффикс и получить машиночитаемый ответ: /api/json, /api/xml или /api/python. Хочешь статус последней сборки джобы - вот он:

Код: Выделить всё

# статус последней сборки в JSON, ?pretty для читаемости
curl -s -u admin:TOKEN \
  "http://jenkins.example.com:8080/job/my-deploy-job/lastBuild/api/json?pretty=true"
В ответе будут поля result (SUCCESS, FAILURE, null если ещё идёт), building, number, duration. Параметр tree режет лишнее и тянет только нужные поля - не выкачивай мегабайты JSON ради одного значения:

Код: Выделить всё

# только нужные поля - быстрее и легче
curl -s -u admin:TOKEN \
  "http://jenkins.example.com:8080/job/my-deploy-job/lastBuild/api/json?tree=number,result,building"
Теперь самое практичное - триггер джобы через Jenkins API. Тут вступает в игру защита от CSRF. По умолчанию Jenkins требует так называемый crumb - одноразовый токен, который надо приложить к любому изменяющему запросу (POST). Получаем crumb и сразу используем его:

Код: Выделить всё

JENKINS=http://jenkins.example.com:8080
CRED="admin:11aabbccddeeff00112233445566778899"

# 1. достаём crumb и имя его заголовка одним запросом
CRUMB=$(curl -s -u "$CRED" \
  "$JENKINS/crumbIssuer/api/json" | \
  python3 -c 'import sys,json; d=json.load(sys.stdin); print(d["crumbRequestField"]+":"+d["crumb"])')

# 2. триггерим параметризованную джобу, передав crumb заголовком
curl -s -X POST -u "$CRED" -H "$CRUMB" \
  "$JENKINS/job/my-deploy-job/buildWithParameters?ENV=prod&VERSION=1.4.2"
Если джоба без параметров - дёргай /build вместо /buildWithParameters. Запомни важный нюанс: когда ты аутентифицируешься по API-токену (а не по сессии/паролю), Jenkins разрешает пропускать crumb - токен сам по себе защищает от CSRF. То есть в скрипте с -u admin:TOKEN можно слать POST на /build без отдельного crumb-запроса. Но если используешь сессионную авторизацию или хочешь железобетонной совместимости - доставай crumb, как показано выше. После триггера сервер возвращает заголовок Location с URL элемента очереди, по которому можно отследить, когда сборка реально стартует.

Script Console: Groovy на контроллере - мощно и опасно

Script console (Manage Jenkins -> Script Console, либо POST на /scriptText) выполняет Groovy-код в JVM самого контроллера, с полными правами. Это администраторский скальпель: им делают то, чего нет ни в UI, ни в CLI. Массово перебрать джобы, починить зависшие сборки, выгрузить отчёт по плагинам. Простой пример - найти все джобы, у которых последняя сборка упала:

Код: Выделить всё

// перебрать все джобы и вывести упавшие
Jenkins.instance.getAllItems(hudson.model.Job).each { job ->
  def b = job.getLastBuild()
  if (b && b.getResult()?.toString() == 'FAILURE') {
    println "FAILED: ${job.fullName} -> ${b.number}"
  }
}
Тот же скрипт можно выполнить удалённо через API (помни про crumb и POST):

Код: Выделить всё

curl -s -X POST -u admin:TOKEN -H "$CRUMB" \
  --data-urlencode "script=println Jenkins.instance.getVersion()" \
  http://jenkins.example.com:8080/scriptText
А теперь про "опасно", и это не для красного словца. Код в script console исполняется БЕЗ Groovy-песочницы, в обход всех permission-проверок Jenkins. Любой, у кого есть доступ к консоли, по сути - root внутри контроллера: может прочитать секреты, переписать конфиги, выполнить shell на хосте. Поэтому доступ к Overall/RunScripts давай только настоящим администраторам, а в проде разовые операции через консоль логируй и согласовывай. То, что можно вынести в обычный pipeline или CLI-команду, - выноси. Консоль - последнее средство, а не ежедневный инструмент.

Безопасность доступа к API: чек-лист

Программный доступ - это всегда расширение поверхности атаки. Минимум, который надо закрыть:
  • Только API-токены, никаких паролей в скриптах и переменных окружения CI. Токен легко отозвать, не меняя пароль.
  • Не выключай CSRF-защиту "чтобы заработало". Это совет из старых форумов 2018 года, сегодня он вредный - научись доставать crumb или ходи по токену.
  • Раздавай права по матрице (Matrix Authorization): сервисному пользователю для триггера джобы хватит Job/Build и Job/Read, а не админских прав.
  • Только HTTPS. Токен в URL или заголовке по голому HTTP - это утечка, ждущая своего часа.
  • Доступ к script console - отдельная привилегия Overall/RunScripts, выдавай поштучно.
Где это в экосистеме 2026

Стоит честно сказать, на фоне чего ты это изучаешь. У GitLab CI и GitHub Actions модель управления pipeline другая: конфиг лежит в репозитории как YAML, а API и так первоклассны и заложены в продукт изначально. У Jenkins исторически наоборот - сначала UI и плагины, API наслаивался сверху, отсюда и зоопарк из трёх способов. Зато этот зоопарк даёт гибкость, которой у конкурентов нет: script console позволяет влезть в живой контроллер так глубоко, как ни одна managed-платформа не разрешит. А связка JCasC (Configuration as Code) плюс эфемерные агенты в Kubernetes плюс REST API превращает старичка Jenkins во вполне современный, полностью описанный кодом сервер. Blue Ocean при этом считай наследием - проект давно заброшен, строить на нём автоматизацию не нужно.

Мини-лаба

Подними локальный Jenkins (хоть в Docker), создай тестовую параметризованную джобу с параметрами ENV и VERSION и прогони руками всю цепочку:
  • Скачай jenkins-cli.jar с /jnlpJars/ и запусти джобу командой build с -f и -p.
  • Выпусти себе API-токен в профиле и забери статус lastBuild через REST API с ?tree=number,result.
  • Достань crumb из /crumbIssuer/api/json и триггерни джобу через POST на /buildWithParameters.
  • Повтори триггер, но по API-токену и БЕЗ crumb - убедись, что Jenkins пропускает запрос.
  • В script console напиши Groovy, который выведет версию Jenkins и список упавших джоб.
Контрольные вопросы
  • Какой транспорт CLI убрали из Jenkins по соображениям безопасности и какие остались?
  • Зачем нужен crumb при триггере джобы и в каком случае его можно не запрашивать?
  • Чем script console принципиально опаснее REST API и кому давать к ней доступ?
  • Какой параметр REST API позволяет вытащить из JSON только нужные поля и не качать лишнее?
Итог

Три инструмента - три задачи. CLI - для скриптов и админских команд на хосте, REST API - для интеграций и триггеров снаружи (помни про crumb или ходи по токену), script console - для редкой глубокой хирургии под строгим контролем доступа. Освой их, и ручной клик по UI останется в прошлом, а Jenkins CI впишется в любую автоматизацию, какую ты придумаешь.
👍3 ❤️2 🔥3 😄 🤔1
Аватара пользователя
wireguard_pilot
Сообщения: 1
Зарегистрирован: 27 май 2026, 15:18

Re: Автоматизация Jenkins: CLI, REST API и script console

Сообщение wireguard_pilot »

Спасибо, наконец дошло про crumb. Сидел и не понимал, почему через curl с паролем POST на /build даёт 403, а с API-токеном проходит без него. Теперь ясно - токен сам закрывает CSRF.
👍 ❤️ 🔥1 😄 🤔2
Аватара пользователя
psykodelik
Сообщения: 1
Зарегистрирован: 15 май 2026, 08:29

Re: Автоматизация Jenkins: CLI, REST API и script console

Сообщение psykodelik »

Про script console прям мурашки. У нас полкоманды имеет к ней доступ просто потому что админы. Пойду резать права по матрице, пока кто-нибудь случайно не выгреб секреты через Groovy.
👍2 ❤️ 🔥 😄 🤔
Ответить
← Предыдущая глава
Blue Ocean и интерфейс Jenkins в 2026
Следующая глава →
Поиск и устранение неисправностей: читаем логи конвейера

Все главы курса «Jenkins: конвейеры CI/CD от основ до продакшена»

Поделиться темой: ✈ Telegram VK
Похожие запросы: что такое jenkins простыми словамикак установить jenkins на linux и в dockerпервичная настройка jenkins после установкикакие плагины jenkins нужны новичкукак настроить агенты jenkins для сборкиcicd для начинающих с чего начать на jenkins

Вернуться в «Jenkins: конвейеры CI/CD от основ до продакшена»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость