Last updated
Last updated
Делаем Dockerfile, на основе которого собираем jenkins-контейнер с докером на борту:
Чтоб на локалке не запускать докер через sudo, нужно добавить себя в докер группу:
sudo usermod -a -G docker $USER
и переподключиться по ssh
Собираем:
Запускаем собранный контейнер:
Поподробнее:
-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 с типом pipeline:
В Pipeline > Definition указываем путь к репозиторию, где лежит Jenkinsfile (о нем ниже)
Если репозиторий приватный, то можно задать доступы используемые при клонировании:
Важно задать ID, чтобы можно было использовать доступ на этапе сборки
Стадии сборки можно определять в специальном файле - Jenkinsfile:
Файл выше делает следующие вещи:
клонит репозиторий, используя доступы с созданным ранее ID
Запускает docker build
Запускает bash-скрипт, который перезапускает docker-контейнер со свежей сборкой:
Когда файл запушен, можно начинать сборку
Jenkins-контейнер сделан на основе Debian, соответственно Docker нужно ставить
В Build Trigger ставим Build when a change is pushed to BitBucket - для запуска сборки при пуше в репозиторий (доступно с ). Также необходимо создать вебхук в BitBicket:
Дружим Jenkins и Docker, чтоб можно было при пуше в репу собирать и деплоить Docker-образы в Jenkins-контейнере