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 и упростить процесс разработки.