Запуск подчиненного агента Jenkins в Docker: несколько методов, объясненных примерами кода

Jenkins — популярный сервер автоматизации с открытым исходным кодом, поддерживающий рабочие процессы непрерывной интеграции и непрерывной доставки (CI/CD). Он позволяет распределять рабочие нагрузки между несколькими компьютерами, используя концепцию подчиненных агентов Jenkins. Docker, с другой стороны, — это платформа, которая позволяет упаковывать приложения и их зависимости в контейнеры. В этой статье мы рассмотрим различные методы запуска подчиненного агента Jenkins в Docker, а также приведем примеры кода для каждого подхода.

Метод 1: использование образа Docker агента Jenkins JNLP
Самый простой способ запустить подчиненный агент Jenkins в Docker — использовать официальный образ Docker агента Jenkins JNLP (протокол запуска сети Java). Этот образ предоставляет предварительно настроенную среду для подчиненных агентов Jenkins. Вот пример того, как его запустить:

docker run -d --name jenkins-agent \
  -v /var/run/docker.sock:/var/run/docker.sock \
  jenkins/jnlp-agent

Метод 2. Создание пользовательского образа Docker с помощью ведомого агента Jenkins.
Другой подход заключается в создании пользовательского образа Docker, который включает в себя ведомый агент Jenkins и любые дополнительные инструменты или зависимости, необходимые для вашей среды сборки. Вы можете использовать Dockerfile для определения образа. Вот пример:

FROM jenkins/jnlp-agent:latest
# Install additional tools or dependencies
RUN apt-get update && apt-get install -y <your-packages>

Создайте образ с помощью следующей команды:

docker build -t my-jenkins-agent .

Затем запустите контейнер:

docker run -d --name jenkins-agent my-jenkins-agent

Метод 3: использование Docker-in-Docker (dind)
Если ваши задания Jenkins требуют запуска команд Docker внутри подчиненного агента Jenkins, для достижения этой цели вы можете использовать Docker-in-Docker (dind). Вот пример:

docker run -d --name jenkins-agent \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /usr/bin/docker:/usr/bin/docker \
  jenkins/jnlp-agent

Метод 4. Развертывание ведомых агентов Jenkins в качестве модулей Kubernetes
Если вы используете Kubernetes в своей инфраструктуре, вы можете развернуть ведомые агенты Jenkins в качестве модулей Kubernetes. Такой подход обеспечивает масштабируемость и гибкость. Вот пример YAML развертывания подчиненного агента Jenkins:

apiVersion: v1
kind: Pod
metadata:
  name: jenkins-agent
spec:
  containers:
  - name: jenkins-agent
    image: jenkins/jnlp-agent:latest
    volumeMounts:
    - name: docker-sock
      mountPath: /var/run/docker.sock
  volumes:
  - name: docker-sock
    hostPath:
      path: /var/run/docker.sock

Запуск подчиненного агента Jenkins в Docker дает ряд преимуществ, в том числе простоту масштабирования, переносимости и изоляции. В этой статье мы рассмотрели несколько методов достижения этой цели, в том числе использование образа Docker агента Jenkins JNLP, создание пользовательских образов Docker, использование Docker-in-Docker (dind) и развертывание подчиненных агентов Jenkins в качестве модулей Kubernetes. Используя эти методы, вы можете оптимизировать рабочие процессы CI/CD и упростить процесс разработки.