# Автоматизация сборки и развертывания приложений.  Gitlab CI.

### 0. Схема стенда
<div drawio-diagram="542"><img src="https://docs.resds.ru/uploads/images/drawio/2024-05/LVaM34DLa8yTF62x-drawing-3-1715785336.png"></div>

### 1. Подготовка репозитория

Сделайте форк репозитория: [https://gitlab.resds.ru/itt/sample-project](https://gitlab.resds.ru/itt/sample-project)



### 2. Подготовка раннера

1. Перейдите в настройки проекта
2. Перейдите в настройки CI/CD
    [![](https://docs.resds.ru/uploads/images/gallery/2024-04/scaled-1680-/rYzC6fTx84y6vQkf-image-1712147664184.png)](https://docs.resds.ru/uploads/images/gallery/2024-04/rYzC6fTx84y6vQkf-image-1712147664184.png)
3. Разверните пункт отвечающий за раннеры и нажмите `New project runner`
[![](https://docs.resds.ru/uploads/images/gallery/2024-04/scaled-1680-/pHkCuxLqHYaegL1z-image-1712147781284.png)](https://docs.resds.ru/uploads/images/gallery/2024-04/pHkCuxLqHYaegL1z-image-1712147781284.png)
4. Введите данные для раннера и добавьте теггов которые будут как-то обозначать общие признаки раннеров 
[![](https://docs.resds.ru/uploads/images/gallery/2024-04/scaled-1680-/aYZQxLfqkz0BMWHX-image-1712147969326.png)](https://docs.resds.ru/uploads/images/gallery/2024-04/aYZQxLfqkz0BMWHX-image-1712147969326.png)
5. Нажмите `Create Runner`
6. Перейдите на узел в котором должен будет работать раннер и установите его
```bash
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64

sudo chmod +x /usr/local/bin/gitlab-runner

sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
```
7. Установите на узле раннера Docker
8. Зарегистрируйте раннер
   [![](https://docs.resds.ru/uploads/images/gallery/2024-04/scaled-1680-/6MCJ62MvaqdTK579-image-1712148428079.png)](https://docs.resds.ru/uploads/images/gallery/2024-04/6MCJ62MvaqdTK579-image-1712148428079.png)

### Задание
1. Создайте новую ветку `feature/ci-cd`
3. В новой ветке создайте многоуровневый `.gitlab-ci.yml`
    1. Статическое тестирования кода(прогнать линтерами код)
    2. Сборка контейнеров и отправка в gitlab-registry
    3. Запуск собранного приложения с использованием ранее загруженного образа
3. Добавьте еще один раннер
4. Добавьте деплой на еще один сервер
    1. С помощью тегов сделайте деплой на 2 узла при запуске
    2. Повторяющийся код уберите с помощью [`Anchors`](https://docs.gitlab.com/ee/ci/yaml/yaml_optimization.html#anchors)
    3. Установите зависимости между запускаемыми шагами
5. Разделите запуск между узлами
   1. Разделите 2 узла по ролям:
       1. `dev`
       2. `prod`
   2. Запуск на `prod` осуществляется вручную после успешного на `dev`
6. Смерджите ветку в `main`