← Назад к вопросам

Как запускаешь Jenkins

1.0 Junior🔥 201 комментариев
#CI/CD и автоматизация

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Мой подход к запуску Jenkins

Запуск Jenkins зависит от целевого окружения и масштаба развёртывания. Я предпочитаю использовать контейнеризацию и оркестрацию для максимальной переносимости и управляемости, но рассмотрю основные варианты.

1. Основные способы запуска

Я выделяю три ключевых метода:

  • Docker / Docker Compose: Для быстрого развёртывания, тестирования и современных микросервисных сред.
  • Нативный (WAR-файл / установщик): Для прямого запуска на виртуальной машине или bare-metal сервере, обычно в унаследованных или строго регулируемых окружениях.
  • Оркестрация (Kubernetes, Nomad): Для масштабируемых, отказоустойчивых и production-готовых кластеров Jenkins.

2. Предпочтительный метод: Docker

Это самый частый и гибкий вариант в моей практике. Он обеспечивает изоляцию, повторяемость и лёгкость обновления. Важнейший аспект — сохранение состояния (persistence).

# Пример базового Dockerfile для кастомизированного Jenkins
FROM jenkins/jenkins:lts-jdk17
USER root
RUN apt-get update && apt-get install -y docker.io curl
USER jenkins
COPY plugins.txt /usr/share/jenkins/ref/plugins.txt
RUN jenkins-plugin-cli --plugin-file /usr/share/jenkins/ref/plugins.txt

Однако в реальности я редко создаю собственный образ с нуля. Чаще использую официальный образ и настраиваю его через docker run или, что удобнее, Docker Compose.

# docker-compose.yml для локальной разработки или небольшого инстанса
version: '3.8'
services:
  jenkins:
    image: jenkins/jenkins:lts-jdk17
    container_name: ci-cd-jenkins
    restart: unless-stopped
    user: root # Иногда требуется для выполнения Docker команд (Docker-out-of-Docker)
    ports:
      - "8080:8080"
      - "50000:50000" # Порт для Jenkins agents
    environment:
      - JAVA_OPTS=-Djenkins.install.runSetupWizard=false
    volumes:
      - jenkins_home:/var/jenkins_home # КРИТИЧНО: volume для данных
      - /var/run/docker.sock:/var/run/docker.sock # Для запуска Docker из контейнера (DinD)
      - ./casc_configs:/var/jenkins_home/casc_configs # Для конфигурации как код (JCasC)
volumes:
  jenkins_home:

Запуск:

docker-compose up -d

3. Production-запуск в Kubernetes (Jenkins Operator или Helm)

Для production-среды с требованиями к отказоустойчивости и масштабированию я разворачиваю Jenkins на Kubernetes. Есть два основных подхода:

  • Helm-чарт: Официальный чарт гибкий и широко используемый.
  • Jenkins Operator (от Kubernetes Operator Framework): Управляет Jenkins более "нативно" для K8s, автоматизируя операции.
# Пример установки с помощью Helm
helm repo add jenkins https://charts.jenkins.io
helm repo update
helm upgrade --install my-jenkins jenkins/jenkins \
  --namespace jenkins \
  --create-namespace \
  --set controller.serviceType=LoadBalancer \
  --set persistence.storageClass=fast-ssd \
  --set controller.adminPassword=${JENKINS_ADMIN_PWD}

Ключевые моменты для K8s:

  • PersistentVolumeClaim (PVC): Для jenkins-home.
  • ServiceAccount с правильными RBAC-правами: Чтобы Jenkins мог создавать поды для агентов и работать с кластером.
  • Конфигурация как код (JCasC): Я настаиваю на использовании Jenkins Configuration as Code Plugin для версионирования всей конфигурации (безопасность, плагины, настройки).

4. Этапы после первичного запуска

Сама команда запуска — это только начало. Далее следует критически важный процесс инициализации:

  1. Получение начального пароля администратора:

    # Для Docker
    docker exec ci-cd-jenkins cat /var/jenkins_home/secrets/initialAdminPassword
    
    # Для K8s (если не использовался JCasC)
    kubectl exec -n jenkins pod/my-jenkins-0 -- cat /var/jenkins_home/secrets/initialAdminPassword
    
  2. Настройка через UI или JCasC: Я сразу применяю JCasC-конфигурацию, которая автоматически устанавливает плагины, настраивает учётные данные, создаёт pipeline-задания и настраивает безопасность.

  3. Настройка агентов (нод): Для распределённой сборки. В K8s это Kubernetes Cloud Plugin, который динамически создаёт поды-агенты.

5. Важные практики и предостережения

  • Резервное копирование: Регулярный бэкап volume /var/jenkins_home — это святое. Использую инструменты вроде backup-to-s3 или скрипты на основе rsync.
  • Безопасность: Обязательно настраиваю Role-Based Strategy Plugin, HTTPS через reverse proxy (Nginx/Ingress) и интеграцию с LDAP/OpenID.
  • Мониторинг: Экспортирую метрики Jenkins в Prometheus (через соответствующий плагин) и настраиваю дашборды в Grafana.
  • Не запускать от root: В Docker-образах это уже сделано (пользователь jenkins), но в нативных инсталляциях нужно создавать отдельного пользователя.
  • Выделение ресурсов: Явно ограничиваю CPU и Memory для контейнера/pod, особенно в production.

Итог: Мой стандартный выбор — Docker Compose для staging/тестовых сред и Kubernetes (развёрнутый через Helm с JCasC) для production. Это обеспечивает консистентность, возможность инфраструктуры как кода (IaC) и легкую интеграцию в современный CI/CD-стек. Простой запуск java -jar jenkins.war я рассматриваю только для самых простых или учебных задач.

Как запускаешь Jenkins | PrepBro