Сразу про версии, чтобы не было сюрпризов. На 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
Код: Выделить всё
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
Код: Выделить всё
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

Первый запуск и где живёт JENKINS_HOME
Открываешь http://сервер:8080 и видишь экран разблокировки. Jenkins при первом старте генерирует одноразовый пароль администратора и пишет его в файл. Достаём его:
Код: Выделить всё
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Теперь самое важное, что часто пропускают новички. Всё состояние 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
Начальный пароль в контейнерном варианте достаём из логов или прямо из тома:
Код: Выделить всё
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
Код: Выделить всё
jenkins:
systemMessage: "Jenkins, поднятый через JCasC"
numExecutors: 2
securityRealm:
local:
allowsSignup: false
users:
- id: admin
password: "${ADMIN_PASSWORD}"
unclassified:
location:
url: "https://ci.example.com/"
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
Код: Выделить всё
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'
}
}
}
}
}
Пара слов про сравнение, раз уж выбираешь инструмент. 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.