Jenkins + Docker
Дружим Jenkins и Docker, чтоб можно было при пуше в репу собирать и деплоить Docker-образы в Jenkins-контейнере
Запуск Jenkins в контейнере
Делаем Dockerfile, на основе которого собираем jenkins-контейнер с докером на борту:
FROM jenkins/jenkins:lts
USER root
# Ставим докер
RUN apt-get update
RUN apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common -y
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
RUN add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) \
stable"
RUN apt-get update
RUN apt-get install docker-ce docker-ce-cli containerd.io -y
# Даем права на использование докера jenkins-юзеру
RUN usermod -aG docker jenkins
USER jenkinsJenkins-контейнер сделан на основе Debian, соответственно Docker нужно ставить как на Debian
Собираем:
Запускаем собранный контейнер:
Поподробнее:
-p 8081:8080 -p 50000:50000- открываем порты для внешнего мира--restart unless-stopped- перезапуск, если контейнер не застопан руками-v /opt/jenkins_home:/var/jenkins_home- связваем контейнер с директорией/opt/jenkins_home, чтоб все работало при перезапуске контейнера-v /var/run/docker.sock:/var/run/docker.sock- связываем докер внутри контейнера с докером на локалке, чтоб jenkins мог деплоить контейнеры на локалку--name jenkins jenkins-docker- обзываем контейнер и запускаем сборку
После запуска jenkins должен начать робить на 8081 порту
При первом запуске jenkins потребует пароль, который можно получить вызвав:

Создание Item'а сборки
В данном туториале, будем делать item с типом pipeline:

В Build Trigger ставим Build when a change is pushed to BitBucket - для запуска сборки при пуше в репозиторий (доступно с плагином). Также необходимо создать вебхук в BitBicket:

В Pipeline > Definition указываем путь к репозиторию, где лежит Jenkinsfile (о нем ниже)

Если репозиторий приватный, то можно задать доступы используемые при клонировании:

Важно задать ID, чтобы можно было использовать доступ на этапе сборки
Jenkinsfile
Стадии сборки можно определять в специальном файле - Jenkinsfile:
Файл выше делает следующие вещи:
клонит репозиторий, используя доступы с созданным ранее ID
Запускает
docker buildЗапускает bash-скрипт, который перезапускает docker-контейнер со свежей сборкой:
Когда файл запушен, можно начинать сборку
Ссылки
Last updated
Was this helpful?