Как автоматизировать настройку Jenkins с помощью Docker

    Команда Simple-Server
    03.06.2026
    20 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Преимущества использования Docker для автоматизации настройки Jenkins

    • Упрощенная установка и настройка : Использование Docker для развертывания Jenkins позволяет избежать множества сложностей, связанных с установкой зависимостей и настройкой окружения. Все, что необходимо, — это запустить несколько команд, чтобы получить готовый к работе Jenkins-сервер.
    • Повторяемость : С Docker вы можете быть уверены, что ваше окружение всегда будет одинаковым, независимо от того, где оно запускается. Это устраняет проблемы, связанные с разными конфигурациями на разных серверах.
    • Изоляция окружений : Docker обеспечивает изоляцию приложений и их зависимостей, что позволяет избежать конфликтов между различными проектами и сервисами.
    • Масштабируемость : Использование Docker и оркестрационных инструментов, таких как Docker Compose или Kubernetes, позволяет легко масштабировать Jenkins, добавляя или удаляя агенты по мере необходимости.
    • Быстрое развертывание и восстановление : В случае сбоя или необходимости обновления Docker позволяет быстро развернуть новый контейнер с Jenkins, минимизируя время простоя и обеспечивая непрерывность работы.

    В этой статье разберём, как с помощью Docker можно автоматизировать настройку и развертывание Jenkins. Мы пройдем через все этапы — от создания Docker файла и настройки Docker Compose до интеграции Jenkins Configuration as Code (JCasC) для автоматической конфигурации Jenkins. В результате у вас будет полное понимание процесса и готовое решение для автоматизации Jenkins в ваших проектах.

    Предварительные требования

    Перед тем как приступить к настройке Jenkins с помощью Docker, необходимо убедиться, что у вас есть все необходимые инструменты и программное обеспечение. В этом разделе разберём, что потребуется для успешной автоматизации Jenkins и как установить необходимые компоненты.

    Установка Docker и Docker Compose

    Docker можно установить на различных операционных системах, включая Linux, macOS и Windows. Ниже приведены шаги для установки Docker на наиболее популярных платформах

    1. Обновите список пакетов командой:

    Обновите список пакетов командой:

    1. Установите пакеты для работы с HTTPS:

    Установите пакеты для работы с HTTPS:

    sudo apt install apt-transport-https ca-certificates curl software-properties-common
    1. Добавьте официальный GPG-ключ Docker:

    Добавьте официальный GPG-ключ Docker:

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    1. Добавьте Docker-репозиторий в APT-источники:

    Добавьте Docker-репозиторий в APT-источники:

    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt install docker-ce
    1. Убедитесь, что Docker работает:

    Убедитесь, что Docker работает:

    sudo systemctl status docker

    Docker Compose обычно устанавливается вместе с Docker Desktop на macOS и Windows. На Linux требуется отдельная установка:

    1. Скачайте последнюю версию Docker Compose:

    Скачайте последнюю версию Docker Compose:

    1. Сделайте скачанный файл исполняемым:

    Сделайте скачанный файл исполняемым:

    sudo chmod +x /usr/local/bin/docker-compose:

    Docker Hub — это облачный репозиторий, где можно находить и хранить Docker-образы. Официальный Jenkins Docker образ доступен на Docker Hub и предоставляет готовый к использованию Jenkins сервер:

    1. Перейдите на сайт Docker Hub.
    2. В строке поиска введите «Jenkins».
    3. Выберите официальный образ «jenkins/jenkins».

    Официальный образ регулярно обновляется и поддерживается сообществом, что гарантирует получение стабильного и безопасного окружения.

    Создание Docker-файла для Jenkins

    В этой главе разберём, как создать Docker файл для Jenkins, который будет использоваться для создания Docker-образа. Мы также обсудим, как добавлять конфигурации и плагины в этот образ для удовлетворения специфическим требованиями вашего проекта

    Docker-файл — это текстовый документ, содержащий все команды, которые пользователь может вызвать в командной строке для сборки образа. В каждом Docker-файле используются инструкции для определения шага в процессе сборки образа. Основные команды включают:

    • FROM: указывает базовый образ для создания нового образа.
    • RUN: выполняет команду в контейнере.
    • COPY или ADD: копирует файлы или директории в контейнер.
    • CMD или ENTRYPOINT: определяет команду, которая будет выполнена при запуске контейнера.

    Базовый Docker-файл для Jenkins

    Начнем с создания простого Docker-файла для Jenkins. Этот файл будет использовать официальный Jenkins образ в качестве базового и добавлять несколько необходимых плагинов.

    1. Создайте новый файл с именем Dockerfile в директории вашего проекта.
    2. Добавьте следующий код:**
      **
    FROM jenkins/jenkins:lts RUN jenkins-plugin-cli --plugins workflow-aggregator git EXPOSE 8080 EXPOSE 50000

    Этот базовый Docker-файл устанавливает два плагина: workflow-aggregator и git. Также он открывает порты 8080 (для веб интерфейса) и 50000 (для соединения с агентами Jenkins).

    Добавление конфигураций и плагинов

    Для более сложных конфигураций мы можем добавить дополнительные шаги в Docker-файл. Например, можно настроить Jenkins для автоматического использования определенного файла конфигурации или добавления скриптов для предварительной настройки.

    Пример Docker-файла с расширенной конфигурацией:

    1. Создайте директорию jenkins_home для хранения пользовательских конфигураций.
    2. Создайте файл custom_config.xml внутри новой директории с необходимыми конфигурациями:
    <?xml version='1.0' encoding='UTF-8'?> <hudson> <numExecutors>2</numExecutors> <mode>NORMAL</mode> <useSecurity>false</useSecurity> <disableRememberMe>false</disableRememberMe> <label></label> <primaryView>All</primaryView> <slaveAgentPort>50000</slaveAgentPort> <securityRealm class='hudson.security.SecurityRealm$None'/> <authorizationStrategy class='hudson.security.AuthorizationStrategy$Unsecured'/> </hudson>
    1. Обновите Dockerfile следующим образом:

    Обновите Dockerfile следующим образом:

    FROM jenkins/jenkins:lts RUN jenkins-plugin-cli --plugins workflow-aggregator git docker-workflow COPY jenkins_home/custom_config.xml /var/jenkins_home/config.xml COPY scripts/init.groovy.d /usr/share/jenkins/ref/init.groovy.d/ EXPOSE 8080 EXPOSE 50000

    В этом примере мы устанавливаем дополнительные плагины, копируем файл пользовательской конфигурации и добавляем скрипты в директорию init.groovy.d для автоматической инициализации Jenkins при первом запуске.

    Docker Compose позволяет описать инфраструктуру вашего приложения в виде кода, используя YAML-файлы. Это упрощает процесс настройки и развертывания, делая его повторяемыми и удобными для управления.

    Основные преимущества использования Docker Compose:

    • Простота использования : Создание и управление много контейнерными приложениями с помощью единого YAML-файла.
    • Масштабируемость : Легкость масштабирования сервисов, добавление или удаление контейнеров по мере необходимости.
    • Удобство тестирования : Возможность запуска изолированных окружений для разработки и тестирования.

    Пример docker-compose.yml файла для Jenkins

    Создадим файл docker-compose.yml для развертывания Jenkins вместе с сопутствующими сервисами, такими как база данных и агент Jenkins.

    1. Создайте файл docker-compose.yml в директории вашего проекта.
    2. Добавьте следующий код в файл:

    Этот файл описывает два сервиса:

    • jenkins: сервис, использующий официальный образ Jenkins. Порты 8080 и 50000 проброшены для доступа к веб-интерфейсу Jenkins и соединения с агентами. Директория /var/jenkins_home монтируется на внешний том jenkins_home, чтобы сохранять данные между перезапусками контейнера.
    • jenkins-agent: сервис, использующий образ Jenkins inbound-agent. Агент подключается к серверу Jenkins через URL, указанный в переменной окружения JENKINS_URL. Рабочая директория агента монтируется на внешний том agent_workdir.

    Теперь, когда файл docker-compose.yml создан, можно запустить все сервисы с помощью одной команды.

    1. Перейдите в директорию, где находится ваш docker-compose.yml.
    2. Выполните команду для запуска всех сервисов:

    Флаг -d запускает контейнеры в фоновом режиме. После выполнения этой команды Docker Compose создаст и запустит контейнеры для всех сервисов, описанных в файле.

    Теперь вы можете проверить состояние запущенных контейнеров с помощью команды:

    Если все прошло успешно, то в выводе окажется только jenkins-server.

    Теперь настроим сервер и создадим агента.

    Если вы перейдете по адресу http://localhost:8080/, то при первом запуске увидите следующее сообщение:

    Jenkins запустился корректно и ожидает ввода пароля администратора для начальной настройки. Для получения пароля выполните следующую команду:

    docker exec -it jenkins-server cat /var/jenkins_home/secrets/initialAdminPassword

    Скопируйте полученный пароль и вставьте в форму на странице «Unlock Jenkins». Откроется новое окно с первоначальной настройкой. Выберите «Install suggested plugins». По окончанию установки заполните форму администратора:

    Примите URL по умолчанию и завершите настройку. Перейдите в «Настроить Jenkins» → «Nodes».

    Нажмите «New Node», укажите имя для нового узла, например «agent», и выберите «Постоянный агент». Заполните остальные поля, как на скриншоте ниже:

    После создания агента у вас откроется окно с командой, которая содержит секрет для подключения агента.

    Скопируйте секрет и добавьте его в docker-compose.yml:

    environment: - JENKINS_URL=http://jenkins-server:8080 - JENKINS_AGENT_NAME=agent - JENKINS_AGENT_WORKDIR=/home/jenkins/agent - JENKINS_SECRET=<your-secret-here> # Укажите секрет здесь

    Для перезапуска введите команды ниже и убедитесь, что jenkins-agent запустился:

    docker-compose down docker-compose up -d

    Настройка Jenkins через код (JCasC)

    Jenkins Configuration as Code (JCasC) — это подход, который позволяет описать всю конфигурацию Jenkins в виде YAML-файла. Это упрощает автоматизацию, поддержание и переносимость настроек Jenkins. В этой главе разберём как настроить JCasC для автоматической конфигурации Jenkins при запуске контейнера.

    JCasC позволяет описать конфигурацию Jenkins в одном YAML-файле, что дает следующие преимущества:

    • Автоматизация : Полностью автоматизированный процесс настройки Jenkins, устраняющий необходимость ручной конфигурации
    • Управляемость : Легкость управления конфигурациями с использование систем контроля версий
    • Документирование : Явная и легко читаемая документация конфигурации Jenkins.

    Пример конфигурационного файла для Jenkins

    Для начала создадим файл конфигурации.

    1. Создайте файл jenkins.yaml в директории вашего проекта.
    2. Добавьте следующую конфигурацию в файл:
    jenkins: systemMessage: "Welcome to Jenkins configured as code!" securityRealm: local: allowsSignup: false users: - id: "admin" password: "${JENKINS_ADMIN_PASSWORD}" authorizationStrategy: loggedInUsersCanDoAnything: allowAnonymousRead: false tools: jdk: installations: - name: "OpenJDK 11" home: "/usr/lib/jvm/java-11-openjdk" jobs: - script: > pipeline { agent any stages { stage('Build') { steps { echo 'Building...' } } stage('Test') { steps { echo 'Testing...' } } stage('Deploy') { steps { echo 'Deploying...' } } } }

    Этот файл конфигурации задает:

    • Системное сообщение : задается в блоке systemMessage. Эта строка будет отображаться на главной странице Jenkins. Оно может быть использовано для информирования пользователей о важной информации или изменениях.
    • Локальная база пользователей и учетная запись администратора : задается в блоке securityRealm. Поле allowsSignup: false отключает возможность самостоятельной регистрации новых пользователей. Далее определяется один пользователь с id: "admin" и паролем, заданным переменной среды ${JENKINS_ADMIN_PASSWORD}.
    • Политика авторизации : задается в блоке authorizationStrategy. Политика loggedInUsersCanDoAnything позволяет авторизованным пользователям выполнять любые действия, при этом allowAnonymousRead: false запрещает анонимным пользователям доступ к системе.
    • Установка JDK : задается в блоке tools. В данном примере указывается JDK с именем OpenJDK 11 и местоположением /usr/lib/jvm/java-11-openjdk.
    • Пример пайплайна : задается в блоке jobs. Этот пайплайн включает три стадии: Build, Test и Deploy, каждая из которых содержит один шаг с выводом соответствующего сообщения в консоль.

    Интеграция JCasC с Docker и Docker Compose

    Теперь необходимо интегрировать наш конфигурационный файл jenkins.yaml с Docker и Docker Compose, чтобы при запуске контейнера Jenkins автоматически применял эту конфигурацию.

    1. Обновите Dockerfile, чтобы скопировать конфигурационный файл в контейнер и установите плагин JCasC:

    Обновите Dockerfile, чтобы скопировать конфигурационный файл в контейнер и установите плагин JCasC:

    FROM jenkins/jenkins:lts RUN jenkins-plugin-cli --plugins configuration-as-code COPY jenkins.yaml /var/jenkins_home/jenkins.yaml EXPOSE 8080 EXPOSE 50000
    1. Обновите docker-compose.yml, чтобы задать переменные окружения и монтировать файл конфигурации. Для этого в блоке volumes добавьте следующий код:

    Обновите docker-compose.yml, чтобы задать переменные окружения и монтировать файл конфигурации. Для этого в блоке volumes добавьте следующий код:

    - ./jenkins.yaml:/var/jenkins_home/jenkins.yaml

    После блока volumes добавьте новый блок environment (в случае если вы не задавали его ранее):

    environment: - JENKINS_ADMIN_PASSWORD=admin_password
    1. Постройте новый образ Jenkins с конфигурацией JCasC:

    Постройте новый образ Jenkins с конфигурацией JCasC:

    После запуска контейнеров, перейдите в браузер по адресу http://localhost:8080 и войдите в систему с учетной записью администратора. Вы должны увидеть сообщения системы и установленную конфигурацию Jenkins в соответствии с вашим jenkins.yaml-файлом.

    • YAML-файлы docker-compose.yml и jenkins.yaml на первый взгляд могут показаться похожими, но выполняют совершенно разные функции. Файл в Docker Compose описывает сервисы и контейнеры, необходимые для запуска Jenkins и его окружения, в то время как файл в JCasC описывает саму конфигурацию Jenkins, включая установку плагинов, настройку пользователей, безопасность, системные настройки и джобы.
    • Расширения .yml и .yaml — это варианты одного и того же формата файла YAML. Они взаимозаменяемы и поддерживаются различными инструментами и библиотеками для работы с YAML. Применение того или иного формата во многом зависит от исторических предпочтений сообщества; в документации по Docker вы чаще встретите примеры с расширением .yml, а в документации по JCasC — с расширением .yaml.
    • Пример пайплайна, приведенного ниже, выполняет только выводы сообщений на каждом этапе, без полезной нагрузки. Этот пример служит для демонстрации структуры и основных концепций, однако это не мешает Jenkins успешно применить конфигурацию. Более сложную и практичную структуру мы рассматривать не будем. jenkins.yaml предназначен для описания статической конфигурации и не предназначен для описания деталей конкретного CI/CD процесса для отдельного проекта. Для описание этих действий есть Jenkinsfile, который предоставляет гибкость для определения конкретных шагов CI/CD и интеграции с системами контроля версий. Более подробно мы поговорим об этом в следующей главе.

    Основные концепции jobs в JCasC

    Jobs — это раздел конфигурационного файла, который позволяет определить и настроить сборочные задачи с помощью кода. Блок включает в себя:

    • Описание сборочных задач : В разделе описываются все аспекты джобы, включая ее тип, этапы, триггеры и шаги выполнения.

    • Типы джобов : Существуют различные типы джобов в Jenkins, такие как фристайл-проекты (freestyle projects), пайплайны (pipelines) и многоконфигурационные проекты (multiconfiguration projects). В JCasC, как правило, используются пайплайны, поскольку они обеспечивают более гибкий и мощный подход к автоматизации.

    • Декларативный синтаксис : Пайплайны обычно описываются с использованием декларативного синтаксиса, что упрощает их понимание и редактирование.

    • pipeline: Основной блок, определяющий пайплайн-джобы.

    • agent any: Определяет, что пайплайн может выполняться на любом доступном агенте Jenkins.

    • stages: Блок, содержащий этапы пайплайна. Stage — этап.

    Дополнительные возможности :

    • Триггеры : Можно добавить триггеры, чтобы джоба запускалась автоматически при определенных условиях, например, по расписанию или при коммите в репозиторий:

    Триггеры : Можно добавить триггеры, чтобы джоба запускалась автоматически при определенных условиях, например, по расписанию или при коммите в репозиторий:

    triggers { cron('H 4/* 0 0 1-5') }
    • Постусловия : Можно добавить постусловия (post-conditions) для выполнения шагов после завершения пайплайна, например, отправка уведомлений или архивирование артефактов.
    • Параметры : Можно определить параметры джобы, чтобы сделать ее конфигурируемой при запуске:
    parameters { string(name: 'BRANCH_NAME', defaultValue: 'main', description: 'Branch to build') }

    Автоматизация развертывания Jenkins в Docker с JCasC

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

    • Используйте Bash для автоматизации процессов установки, обновления и запуска контейнеров Jenkins.

    • Используйте Jenkins Configuration as Code для автоматизации конфигурации.

    • Скрипт для развертывания Jenkins в Docker:

    Скрипт для развертывания Jenkins в Docker:

    #!/bin/bash # Параметры Jenkins JENKINS_IMAGE="jenkins/jenkins:lts" CONTAINER_NAME="jenkins-server" JENKINS_PORT="8080" JENKINS_AGENT_PORT="50000" VOLUME_NAME="jenkins_home" CONFIG_DIR="$(pwd)/jenkins_configuration" # Создание тома для хранения данных Jenkins docker volume create $VOLUME_NAME # Запуск контейнера Jenkins с JCasC docker run -d \ --name $CONTAINER_NAME \ -p $JENKINS_PORT:8080 \ -p $JENKINS_AGENT_PORT:50000 \ -v $VOLUME_NAME:/var/jenkins_home \ -v $CONFIG_DIR:/var/jenkins_home/casc_configs \ -e CASC_JENKINS_CONFIG=/var/jenkins_home/casc_configs \ $JENKINS_IMAGE
    • Пример JCasC конфигурационного файла jenkins.yaml мы рассматривали выше.

    Пример JCasC конфигурационного файла jenkins.yaml мы рассматривали выше.

    Настройка CI/CD-пайплайна для обновления Jenkins

    Для настройки CI/CD пайплайна следуйте этим шагам:

    1. Откройте Jenkins и перейдите на главную страницу.

    2. Нажмите «Создать Item».

    3. Введите имя для нового элемента, выберите «Pipeline» и нажмите «OK».

    • * Если у вас нет этого раздела, нужно будет установить плагин внутри Jenkins. Для этого перейдите в «Настроить Jenkins» → «Plugins». Во вкладке «Available Plugins» введите в поиске «Pipeline» и выберите плагин как на картинке ниже. Установите этот плагин.
    • Если у вас нет этого раздела, нужно будет установить плагин внутри Jenkins. Для этого перейдите в «Настроить Jenkins» → «Plugins». Во вкладке «Available Plugins» введите в поиске «Pipeline» и выберите плагин как на картинке ниже. Установите этот плагин.

    • * Также по аналогии установите плагин Git Push.
    • Также по аналогии установите плагин Git Push.

    • * После установки перейдите обратно в раздел «Создать Item»
    • После установки перейдите обратно в раздел «Создать Item»

    После установки перейдите обратно в раздел «Создать Item»

    1. Перейдите в раздел «Pipeline» и в «Definition» выберите «Pipeline script from SCM». В качестве SCM выберите Git.

    2. Добавьте URL вашего репозитория; если он приватный, добавьте учётную запись. В поле «Branch Specifier» укажите ветку, в которой находится Jenkinsfile (например, */main). Обратите внимание, Jenkinsfile создается без расширения. Если у вас есть подкаталог, в котором находится Jenkinsfile, укажите его в поле «Script Path».

    3. Нажмите «Save».

    4. На странице вашего нового pipeline нажмите «Собрать сейчас».

    5. Перейдите в «Console output». В случае успешного завершения вы должны увидеть следующий вывод.

    Для этого пайплайна использовались следующие файлы:

    FROM jenkins/jenkins:lts USER root RUN apt-get update && apt-get install -y docker.io version: '3.7' services: jenkins: build: . ports: - "8081:8080" - "50001:50000" volumes: - jenkins_home:/var/jenkins_home - /var/run/docker.sock:/var/run/docker.sock environment: - JAVA_OPTS=-Djenkins.install.runSetupWizard=false networks: - jenkins-network volumes: jenkins_home: networks: jenkins-network:

    Здесь используются порты 8081 и 50001, чтобы новый развернутый Jenkins мог занять порты 8080 и 50000 соответственно. То есть основной Jenkins, из которого запускается пайплайн, сейчас находится по адресу http://localhost:8081/. Один из способов проверить, что Jenkins развернулся, это перейти по адресу http://localhost:8080/, поскольку в пайплайне мы задавали именно его. Так как это новый образ, на главной странице высветится приветственное сообщение с авторизацией:


    Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490₽

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190₽

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны