moovix

Полное руководство по настройке деплоя из gitlab в Jenkins и на продакшен сервер

Moovix » Блог » Полное руководство по настройке деплоя из gitlab в Jenkins и на продакшен сервер
ГАЙД ПО JENKINS Перед началом работу нужно убедиться, что установлены следующие плагины:

ГАЙД ПО JENKINS

 
Перед началом работу нужно убедиться, что установлены следующие плагины:

Так же на slave серверах должно быть установлено java jdk, jre

Этап 1. Подключение агента
Первое что нужно сделать – подключить агент. Этот агент будет сервер на который мы хотим делать деплой.

1. Настройка доступов
Нужно настроить доступы к серверам. Идем на МАСТЕР-сервер и заходим под пользователем Jenkins:

				
					su Jenkins
				
			

Далее генерируем ключи ssh:

				
					ssh-keygen -t ed25519
				
			

Мастер-сервер

Заходим на SLAVE-сервер и создаем там нового пользователя Jenkins:

				
					useradd -m -s /bin/bash Jenkins

				
			

В /home должна появиться папка jenkins

Slave-сервер

Добавим пароль к пользователю Jenkins:

				
					sudo passwd jenkins
				
			

Теперь нужно «настроить» ключи, для этого нужно в папке Jenkins создать папку .ssh:

				
					cd /home/jenkins
mkdir .ssh
				
			

Перейдем в папку .ssh и создам файл authorized_keys

				
					cd .ssh/ && touch authorized_keys
				
			

И положим наш публичный ключ с МАСТЕРА в этот файл

Мастер-сервер

Slave-сервер

Добавим пользователя Jenkins в группу sudo:

				
					usermod -aG sudo Jenkins
				
			

Настройка пользователя завершена

2. Подключение агента

Теперь подключаем агента, для этого идем на наш МАСТЕР и заходим в Jenkins

Далее идем по Manage Jenkins -> Manage Nodes and Clouds -> New node

Даем название агента:

Заполняем строки:

Remote root directory: /home/Jenkins
Label: ВАША_МЕТКА <- Обязательно заполнить

Настроим способ запуска:

В поле Host вводим адрес SLAVE сервер и далее нам нужно добавить наши креды для этго нажимаем на Add->Jenkins

Появится окно добавления кредов:

Выбираем следующиее:

1) Kind -> SSH Username with private key

2) ID тут вводим как хоти назвать данный кред

3) Username вводим нашего пользователя, который создавали на SLAVE т.е jenkins

4) Private key вводим наш приватный ключ с МАСТЕРА

Сохраняем и выбираем наш кред:

Выбираем политику верификации -> Manually trusted key Verification Strategy

Сохраняем и смотрим подключился ли агент

Агент доступен, в логах агента видим успешное подключение

Отлично, вы подключили агента, теперь нужно настроить автодеплой на этот сервер

Этап 2. Настройка деплоя

Настроим креды для Gitlab:
Manage Jenkins -> Configure System

1) Спускаемся вниз до Gitlab

2) Впишем название подключения

				
					A name for the connection -> Gitlab
				
			

3) Впишем URL

				
					Gitlab host URL -> https://gitlab.com/
				
			

Добавим токен Gitlab

Где взять токен?
Идем в наш Gitlab и переходим в репозиторий с кодом

Далее Setting -> Access Token

Даем название токену, даты окончания, роль выбираем Developer, даем полные права, сохраняем токен и копируем его значение.

Возвращаемся в Jenkins и добавляем токен как кред:

Kind -> Gitlab API Token
После всех действий тестируем подключение, должно быть Success

Перейдем на настройке самого Pipeline
Для этого на домашней странице нажимаем “Add item”

Выбираем Freestyle Job он самый первый будет

И попадаем в настройки Pipeline

Выбираем Gitlab Connection наше подключение -> Gitlab
Выбираем «Ограничить лейблы сборщиков, которые могут исполнять данную задачу»

Вводим нашу метку, который мы давали SLAVE агенту. Удалите в конце пробел, это поле чувствительно к регистру

Открываем вкладку «Расширенные»(Advanced) и выбираем
«Использовать другую директорию»

ВАЖНО: этот пункт отвечает в какую папку на SLAVE будет собираться проект для теста я укажу /home/Jenkins/app, но тут можно указать деплой прямо в /var/lib/www/…. т.е куда смотрит конфиг веб-сервера. Менять по своему усмотрению

Переходим в следующему пункту «Управление исходном кодом»

Заполняем:
1) Repository URL
Путь к нашему репозиторию, в моем случае:
https://gitlab.com/omroners/laravel

Даем название токену, даты окончания, роль выбираем Developer, даем полные права, сохраняем токен и копируем его значение.

2) Добавим креды от нашего Gitlab в форме Username and Login

Вводим Username и Password от своего Gitlab пользователя Сохраняем и выбираем наши креды

3) Branches to build

Тут выбираем нашу ветку для сборки(какая у вас ветка для деплоя), в моем случае у меня одна единственная ветка main, поэтому я могу оставить это поле пустым и оно будет брать любую доступную

4) Выбираем «Просмоторщик репозитория» -> Gitlab

Переходим к следующему пункту «Триггеры сборки»

Остановимся тут по подробнее, Jenkins предлагает различные варианты запуска проект, его можно запускать вручную, запускать периодически, или через url, настроить Webhook для Gitlab.

Я буду настраивать Webhook т.к это самое лучшее решение. Что он даст? Нам не нужно будет постоянно запускать наш билд, он будет автоматически подхватывать изменения с Gitlab

В панели дженкинс /job/имя проекта/configure

Выберем пункт Build when a change is pushed to GitLab. GitLab webhook URL: http://85.192.40.214:8080/project/Deploy
 
Перед нами откроется выбор политики работы Webhook, тут настройте по своему усмотрению, для своего случая я выберу Push Event, он будет запускать сборки когда в Gitlab произойдет событие Push. Есть различные варианты: когда будет открыт запрос на Merge Request, когда принят Merge Request, когда закрыт Merge Request

Когда определились с политикой, нужно интегрировать Webhook.
Для этого идем в Gitlab репозиторий проекта и выбирает Settings ->
Integration и ищем Jenkins

Заполняем триггеры срабатывания

И вводим URL до нашего Pipeline его можно посмотреть тут

Вводим имя проекта, логин и пароль от Jenkins

Проверим подключение

Отлично. Webhook подключен

Теперь нужно определиться когда выполнять миграцию php artisan migrate. Тут можно сделать как ДО процесса сборки, так и ПОСЛЕ деплоя.
Я выберу сразу оба, чтобы показать как это будет работать.
Для этого выберем в «Среда сборки» Run buildstep before SCM runs

Добавим шаг выполнить команду shell

В этом окне вписывает любые команды Linux, которые ходим выполнить перед сборкой проекта. Команды которые будут тут прописаны будут выполнятся КАЖДЫЙ раз, когда будет запущен текущей Pipeline. Рабочая директория будет такая какую мы указывали ранее

Добавим еще выполнение команд после сборки проекта
«Шаги сборки»

Отлично. Мы закончили настройку нашего Pipeline, теперь запустим его и посмотрим что будет на сервере SLAVE
Выбираем Build Now

Наша сборка завершилась, но у меня закрылась с ошибкой т.к у меня в репозитории нету vendors, зато наш проект скопировался на сервер

Теперь проверим как работает наш автодеплой и триггеры, для этого я изменю в репозитории файл README и сделаю Push
До изменения

Как видим Jenkins автоматически начал сборку проекта после того как я внес изменения в репозиторий

Подхватилось только то изменение которые было внесено
Зайдем в логи сборки и увидим следующие: в нашем модуле который выполняет команды ПЕРЕД сборкой проекта выполнился php artisan migrate

Далее выполнился деплой с репозитория

И после была команда сделать опять php artisan migrate, но т.к она была сделана ранее то ничего не смигрировалось

Наша сборка закрылась успешно

Мы полностью настроили Jenkins, подключили агента, и настроили авто деплой тех файлов, которые изменяются в репозитории

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Moovix » Блог » Полное руководство по настройке деплоя из gitlab в Jenkins и на продакшен сервер

Есть вопрос? мы онлайн

Есть проект? Заполните бриф.

top