Skip to content

bmstu-rsoi/rsoi-2022-lab1-ci-cd-tanyagaKim

Repository files navigation

Лабораторная работа #1

GitHub Classroom Workflow

Continuous Integration & Continuous Delivery

Формулировка

В рамках первой лабораторной работы требуется написать простейшее веб приложение, предоставляющее пользователю набор операций над сущностью Person. Для этого приложения автоматизировать процесс сборки, тестирования и релиза на Heroku.

Приложение должно реализовать API:

  • GET /persons/{personId} – информация о человеке;
  • GET /persons – информация по всем людям;
  • POST /persons – создание новой записи о человеке;
  • PATCH /persons/{personId} – обновление существующей записи о человеке;
  • DELETE /persons/{personId} – удаление записи о человеке.

Описание API в формате OpenAPI.

Требования

  • Исходный проект хранится на Github. Для сборки использовать только Github Actions.
  • Запросы / ответы должны быть в формате JSON.
  • Если запись по id не найдена, то возвращать HTTP статус 404 Not Found.
  • При создании новой записи о человека (метод POST /person) возвращать HTTP статус 201 Created с пустым телом и Header Location: /api/v1/persons/{personId}, где personId – id созданной записи.
  • Приложение должно содержать 4-5 unit-тестов на реализованные операции.
  • Приложение должно быть завернуто в Docker.
  • Деплой на Heroku реализовать средствами GitHub Actions, для деплоя использовать docker. Для деплоя нельзя использовать Heroku CLI или webhooks.
  • В build.yml дописать шаги на сборку, прогон unit-тестов и деплой на Heroku.
  • Приложение должно использовать БД для хранения записей.
  • В [inst][heroku] Lab1.postman_environment.json заменить значение baseUrl на адрес развернутого сервиса на Heroku.

Пояснения

  • Пример приложения на Kotlin / Spring.
  • Для локальной разработки можно использовать Postgres в docker, для этого нужно запустить docker compose up -d, поднимется контейнер с Postgres 13, будет создана БД persons и пользователь program:test.
  • После успешного деплоя на Heroku, через newman запускаются интеграционные тесты. Интеграционные тесты можно проверить локально, для этого нужно импортировать в Postman коллекцию lab1.postman_collection.json]) и environment [local] lab1.postman_environment.json.
  • Для поиска нужного инструмента для сборки используется Github Marketplace.
  • Пояснение как работает Heroku.
  • Для подключения БД на Heroku заходите через Dashboard в раздел Resources и в блоке Add-ons ищете Heroku Postgres. Для получения адреса, пользователя и пароля переходите в саму БД и выбираете раздел Settings -> Database Credentials.
  • ❗Heroku не позволяет регистрировать новых пользователей, поэтому для регистрации используйте VPN.

Прием задания

  1. При получении задания у вас создается fork этого репозитория для вашего пользователя.
  2. После того как все тесты успешно завершатся, в Github Classroom на Dashboard будет отмечен успешный прогон тестов.
  3. ❗️С конца ноября Heroku убирает Free Plan, останутся только платные подписки. В связи с этим, дедлайн по сдаче ЛР #1 10 ноября.

Деплой на Railway

Сдача лабораторной работы происходила после дедлайна, в связи с чем был выбран другой хостинг с бесплатным тарифом.

Railway - облачная PaaS-платформа, на которой можно создавать инфраструктуру, разрабатывать ее локально, а затем развертывать в облаке.

Преимущества сервиса:

  • деплой из ветки на Github;
  • легкость масштабирования;
  • возможность подключения базы данных (в том числе PostgreSQL) как сервиса;
  • создание образа по Dockerfile;
  • простая и интуитивно понятная конфигурация инструментов.

Недостатки:

  • не поддерживает docker compose;
  • поддерживает только следующие языки программирования и фреймворки (NodeJS, Deno, Python, Go, Ruby, PHP, Java, Rust, .NET, Haskell, Crystal, Swift, Zig, Dart, Staticfile, Elixir);
  • нет импорта данных из дампа.

Инструкция:

  1. Регистрация на Railway (под учеткой GitHub или через электронную почту). Страница входа Railway

После регистрации через почту дается 200 часов бесплатной работы. Чтобы их увеличить, необходимо пройти процедуру верификации. Верифицировать можно двумя способами: добавлением карты или подключением аккаунта GitHub. После чего количество бесплатных часов работы увеличивается до 500.

  1. Создание базы данных (PosgtreSQL). На основном дашборде нажать New Project. Создание проекта Railway Выбрать подходящую базу данных. Выбор сервиса для проекта. Переход в настройки окружения. Дашборд после создания сервиса Переход на вкладку параметров окружения и их задание/просмотр. Задание параметров окружения Переход на вкладку подключения и копирование строки подключения. Подключение с локальной машины к базе данных и создание необходимых таблиц. Вкладка Connect сервиса PostgreSQL

  2. Соединение с GitHub и деплой. Соединение с репозиторием Соединение с репозиторием

Настройка нового репозитория Настройка нового репозитория

Выбор проекта публичного проекта Выбор проекта публичного проекта

Наcтройка видимости для репозитория Наcтройка видимости для репозитория

Добавление необходимых переменных окружения Добавление необходимых переменных окружения

Добавление переменных для подключения к базе данных Добавление переменных для подключения к базе данных

Автоматический деплой из мастера Автоматический деплой из мастера

Просмотр логов сборки Просмотр логов сборки

Генерация доменного имени Генерация доменного имени

Редактирование доменного имени Редактирование доменного имени

!!! ДЛЯ КОРРЕКТНОЙ ТРЕБУЕТСЯ РАЗВЕРТКА ПРИЛОЖЕНИЯ НА 3000 ПОРТЕ !!! Развертка на 3000 порту Развертка на 3000 порту

Пример работы приложения Пример работы приложения

About

rsoi-2022-lab1-ci-cd-tanyagaKim created by GitHub Classroom

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published