Установка Jenkins: пакеты, Docker и Kubernetes

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

Установка Jenkins: пакеты, Docker и Kubernetes

Сообщение 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
Ты решил поднять CI/CD и упёрся в первый же вопрос: а как, собственно, поставить сам Jenkins? Способов несколько, и выбор не косметический. Поставишь нативным пакетом - получишь сервис, который живёт на хосте годами и который никто не трогает, пока он не сломается. Запустишь в Docker - получишь воспроизводимость и лёгкий апгрейд, но придётся думать про том с данными. Раскатаешь в Kubernetes - получишь эфемерных агентов и масштабирование, но и сложность вырастет на порядок. В этом уроке разберём все три пути, доведём установку Jenkins до первого экрана мастера и поймём, где живёт состояние, чтобы потом не потерять его при первом же обновлении.

Сразу про версии, чтобы не было сюрпризов. На 2026 год Jenkins требует Java 17 как минимум, а свежие еженедельные сборки уже подняли планку до Java 21. LTS-линейка (long-term support, стабильная) идёт в районе 2.5xx, и именно её ставят в продакшен. Java 8 и 11 - в прошлом, на них Jenkins не запустится. Поэтому первым делом ставим JDK правильной версии, а потом уже сам Jenkins. Если выбираешь между LTS и weekly - бери LTS, она получает фиксы раз в несколько недель и не ломается на ровном месте.

Установка Jenkins на Linux нативным пакетом

Классический путь, описанный ещё у Ластера, никуда не делся: подключаешь официальный репозиторий проекта и ставишь Jenkins штатным пакетным менеджером. Это удобно тем, что обновления приходят через apt или dnf вместе с системными. Разберём установку Jenkins на Linux по шагам для Debian/Ubuntu.

Сначала ставим Java (берём Temurin или OpenJDK 21):

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

sudo apt-get update
sudo apt-get install -y fontconfig openjdk-21-jre
java -version
Теперь подключаем репозиторий Jenkins и ставим стабильную сборку:

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

sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \
  https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key

echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
  https://pkg.jenkins.io/debian-stable binary/" \
  | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null

sudo apt-get update
sudo apt-get install -y jenkins
sudo systemctl enable --now jenkins
Для RHEL/Fedora/Rocky схема та же по смыслу, только через dnf:

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

sudo wget -O /etc/yum.repos.d/jenkins.repo \
  https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
sudo dnf install -y fontconfig java-21-openjdk jenkins
sudo systemctl enable --now jenkins
После старта сервис слушает порт 8080. Если не хочешь возиться с репозиторием, можно просто скачать war-файл (jenkins.war) со страницы загрузок и запустить его напрямую: java -jar jenkins.war. Это удобно для быстрой пробы или нестандартного окружения, но для сервера лучше пакет с systemd-юнитом - он сам поднимет Jenkins после перезагрузки.

Изображение

Первый запуск и где живёт JENKINS_HOME

Открываешь http://сервер:8080 и видишь экран разблокировки. Jenkins при первом старте генерирует одноразовый пароль администратора и пишет его в файл. Достаём его:

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

sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Вставляешь строку в форму, дальше мастер настройки предложит установить рекомендованный набор плагинов (Suggested plugins) - для первого знакомства соглашайся. Затем создаёшь первого пользователя-администратора и подтверждаешь URL. Всё, инстанс готов.

Теперь самое важное, что часто пропускают новички. Всё состояние Jenkins - конфигурация, история сборок, установленные плагины, ключи, секреты, настройки задач - лежит в одной директории JENKINS_HOME. Для пакетной установки это /var/lib/jenkins, в официальном Docker-образе - /var/jenkins_home. Сам бинарник и Java можно снести и переустановить без потерь, а вот JENKINS_HOME - это и есть твой Jenkins. Отсюда два правила: бэкапить надо именно эту папку (а не образ и не пакет), и при работе в контейнере её обязательно выносить на постоянное хранилище. Потеряешь JENKINS_HOME - потеряешь всё, восстанавливать будет неоткуда.

Docker Jenkins: запуск в контейнере с постоянным томом

Контейнерный запуск - самый предсказуемый способ на 2026 год. Образ собирает и поддерживает сам проект, ты не возишься с зависимостями хоста, а апгрейд - это смена тега. Актуальный официальный образ - jenkins/jenkins, тег lts-jdk17 (есть и lts-jdk21). Простой docker jenkins запуск выглядит так:

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

docker run -d --name jenkins \
  -p 8080:8080 -p 50000:50000 \
  -v jenkins_home:/var/jenkins_home \
  jenkins/jenkins:lts-jdk17
Порт 8080 - веб-интерфейс, 50000 - подключение агентов по протоколу JNLP. Ключевая строка тут - монтирование тома jenkins_home в /var/jenkins_home. Именованный том (volume) переживает удаление и пересоздание контейнера, поэтому твои сборки и плагины не испаряются при обновлении. Без этого тома любой docker rm обнулит весь Jenkins - это грабли номер один.

Начальный пароль в контейнерном варианте достаём из логов или прямо из тома:

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

docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
Чтобы апгрейднуться, достаточно остановить старый контейнер, скачать свежий образ (docker pull jenkins/jenkins:lts-jdk17) и запустить новый с тем же томом - данные подхватятся. В реальных проектах поверх этого добавляют JCasC (Jenkins Configuration as Code): кладёшь YAML-файл с описанием всей конфигурации и монтируешь его, после чего инстанс поднимается уже настроенным, без ручного клика по мастеру. Минимальный пример casc.yaml:

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

jenkins:
  systemMessage: "Jenkins, поднятый через JCasC"
  numExecutors: 2
  securityRealm:
    local:
      allowsSignup: false
      users:
        - id: admin
          password: "${ADMIN_PASSWORD}"
unclassified:
  location:
    url: "https://ci.example.com/"
Файл подключают переменной CASC_JENKINS_CONFIG, указывающей на путь внутри контейнера. Это и есть современный подход: конфигурация в git, а не в кликах мышкой.

Jenkins в Kubernetes через Helm и эфемерные агенты

Если у тебя уже есть кластер, логично запускать Jenkins в нём. Самый прямой путь - официальный Helm-чарт jenkinsci/jenkins. Он ставит контроллер как StatefulSet с PVC под JENKINS_HOME и сразу настраивает kubernetes-плагин:

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

helm repo add jenkins https://charts.jenkins.io
helm repo update
helm install my-jenkins jenkins/jenkins --namespace ci --create-namespace
Главная фишка Jenkins в Kubernetes - эфемерные агенты. Контроллер на каждую сборку поднимает отдельный pod-агент, гоняет в нём шаги пайплайна и тут же его удаляет. Никаких висящих машин с накопленным мусором: каждый билд стартует с чистого листа. В декларативном пайплайне это описывается прямо в Jenkinsfile через podTemplate в виде YAML:

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

pipeline {
  agent {
    kubernetes {
      yaml '''
        apiVersion: v1
        kind: Pod
        spec:
          containers:
          - name: maven
            image: maven:3.9-eclipse-temurin-21
            command: ["sleep"]
            args: ["infinity"]
      '''
    }
  }
  stages {
    stage('Build') {
      steps {
        container('maven') {
          sh 'mvn -B -version'
        }
      }
    }
  }
}
На этом этапе курса не обязательно осваивать k8s до конца - достаточно понимать идею: контроллер один и постоянный, агенты одноразовые и масштабируются под нагрузку. Это та модель, которой нет в книге 2018 года, и именно она вытеснила статичные пулы агентов.

Пара слов про сравнение, раз уж выбираешь инструмент. GitHub Actions и GitLab CI идут из коробки вместе с хостингом репозитория, конфиг в YAML лежит рядом с кодом, ставить ничего не надо. Jenkins проигрывает им в простоте старта, но выигрывает контролем: свой парк агентов, тысячи плагинов, конфигурация под любой нестандартный сценарий. Поэтому Jenkins до сих пор живёт там, где нужна гибкость, а не готовый SaaS.

Типичные грабли
  • Запустил Docker без тома - после первого docker rm весь Jenkins пропал. Всегда монтируй /var/jenkins_home на volume.
  • Поставил старую Java (8 или 11) - Jenkins не стартует. Нужна 17 или новее, для свежих сборок - 21.
  • Бэкапишь образ или пакет вместо JENKINS_HOME. Бэкап - это всегда папка с состоянием, остальное переустанавливается.
  • На экране разблокировки не там ищешь пароль. Путь зависит от способа установки: /var/lib/jenkins/secrets/ для пакета, /var/jenkins_home/secrets/ для контейнера.
  • Делаешь ставку на Blue Ocean как на основной UI. Он в режиме поддержки, новых фич не будет - строй процессы на declarative pipeline и обычном интерфейсе.
Мини-лаба

Подними Jenkins двумя способами и сравни. Сначала через Docker: запусти контейнер с томом, достань initialAdminPassword из тома, пройди мастер, поставь рекомендованные плагины. Затем выполни docker rm и docker run с тем же томом - убедись, что настройки на месте. Потом для сравнения скачай war-файл и запусти java -jar jenkins.war, посмотри, где у него оказался JENKINS_HOME. Найди и открой эту директорию, разберись, что в ней лежит. Если есть доступ к kind или minikube - поставь чарт jenkins/jenkins и посмотри, как при запуске сборки появляется и исчезает pod-агент.

Контрольные вопросы
  • Какая минимальная версия Java нужна для Jenkins в 2026 году и чем LTS отличается от weekly?
  • Что хранится в JENKINS_HOME и почему бэкапить надо именно эту директорию?
  • Зачем при запуске Jenkins в Docker обязателен том на /var/jenkins_home и что произойдёт без него?
  • Что такое эфемерные агенты в Kubernetes и какое преимущество они дают перед статичным пулом машин?
Итог

Три пути установки - пакет, Docker и Kubernetes - решают разные задачи, но объединяет их одно: весь Jenkins живёт в JENKINS_HOME. Пакет хорош для простого сервера, Docker с томом - золотая середина по воспроизводимости, Helm в кластере - для масштаба и эфемерных агентов. Что бы ты ни выбрал, ставь Java 17 или новее, выноси состояние на постоянное хранилище и держи конфигурацию в коде через JCasC. В следующих уроках перейдём к самому интересному - к написанию пайплайнов в Jenkinsfile.
👍1 ❤️2 🔥3 😄 🤔1
Аватара пользователя
quazi
Сообщения: 1
Зарегистрирован: 17 май 2026, 00:45

Re: Установка Jenkins: пакеты, Docker и Kubernetes

Сообщение quazi »

Спасибо, наконец дошло почему у меня после docker rm все слетало - том не монтировал. Теперь jenkins_home на volume и норм.
👍 ❤️ 🔥 😄 🤔1
Аватара пользователя
clickhousewhale
Сообщения: 1
Зарегистрирован: 16 май 2026, 08:27

Re: Установка Jenkins: пакеты, Docker и Kubernetes

Сообщение clickhousewhale »

А war-файлом в проде вообще кто-то поднимает или это только для пробы? Думаю поставить пакетом с systemd, но интересно мнение.
👍1 ❤️1 🔥 😄 🤔
Ответить
← Предыдущая глава
Архитектура Jenkins: контроллер, агенты, узлы и исполнители
Следующая глава →
Первичная настройка Jenkins: мастер, плагины, пользователи

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

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

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

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

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