Вам уже знакомо это приложение, вы работали с ним во время выполнения домашнего задания по автотестам. Теперь вам предстоит добавить в него CI/CD.
Вам необходимо форкнуть этот репозиторий и добавить:
Также вам будет нужно настроить виртуальную машину в Яндекс Облаке и Container Registry, для этого вам выдадут промокоды на 1500 рублей. IP-адрес этой машинки укажите в README, чтобы проверяющий мог открыть приложение, которое будет на ней запущено.
Репозиторий, который вы форкнули, должен быть публичным и настроен таким образом, чтобы никто не могу пушить ветку main
, но любой человек мог:
В файле ./src/client/pages/About.tsx
замените [Your Name]
на своё имя и поправьте тест, которы проверяет содержимое этой строчки.
Вам необходимо подготовить Dockerfile и добавить скрипты в package.json
для работы с Docker-образами.
Скрипт:
build:docker
— собирает образ (с тегом shir-infra
), который будет запускать приложениеstart:docker
— запускает последний собранный образа с тегом shri-infra
на 3000 портуСоздайте виртуальную машину (Compute Cloud), воспользовавшись инструкцией по ссылке:\ https://yandex.cloud/ru/docs/compute/quickstart/quick-create-linux#create-vm
Рекомендуемые параметры:
В итоге должно получиться чуть меньше 2 200 рублей в месяц — на две недели выполнения и проверки задания должно хватить.
Флоу с проверками, который запускается при создании / изменении PR:
запускает параллельно линтер через npm run lint
и тесты через npm run test
нужно настроить ограничение на мердж изменений, если проверки не прошли
Флоу создания релиза, который запускается вручную (on: [workflow_dispatch]
):
запускает параллельно линтер и тесты
здесь и дальше версией релиза будет считаться номер запуска флоу ${{ github.run_number }}
отводит от main
релизуню ветку releases/<версия_релиза>
собирает docker-образ с двумя тегами тегами:
cr.yandex/<идентификатор_реестра>/app:<версия_релиза>
cr.yandex/<идентификатор_реестра>/app:<версия_релиза>_latest
загружает docker-образ в Container Registry (необходимо, чтобы реджистри отображались оба тега)
создаёт тег, с номером текущей версии, который указывает на последний коммит в главной ветке
создаёт Issue в GitHub, которое содержит всю важную информацию:
${{ github.run_number }}
),cr.yandex/<идентификатор_реестра>/app:<версия_релиза>
обновляет файл CHANGELOG.md
в корне проекта, дописывает сверху новую версию в виде заголовка, а под ней — список коммитов от предыдущего релизного (или фиксрелизного) тега
Флоу фикса к релизу, который запускается вручную:
принимает на вход версию релиза и все действия выполняет в ветке этого релиза
запускает параллельно проверку типов и тесты
собирает docker-образ с двумя тегами:
cr.yandex/<идентификатор_реестра>/app:<версия_релиза>_fix<номер_запуска_фиксрелизного_флоу>
cr.yandex/<идентификатор_реестра>/app:<версия_релиза>_latest
загружает docker-образ в Container Registry (в реджистри должен появиться образ с двумя тегами, у старого образа тег latest пропадёт)
создаёт тег с номером текущего релиза + пометкой fix
и номером фикса
добавляет комментарий в Issue, который содержит:
cr.yandex/<идентификатор_реестра>/app:<версия_релиза>_fix<номер_запуска_фиксрелизного_флоу>
Флоу выкатки релиза в прод
принимает на вход версию релиза
проверяет, что существует образ в Container Registry с тегом <версия_релиза>_latest
в Issue добавьте комментарий о том, что релиз выкачен в прод c датой и человеком, который запустил выкатку в прод
# установите зависимости
npm ci
# соберите клиентский код приложения
npm run build
# запустите сервер
npm start
После этого можете открыть приложение в браузере по адресу http://localhost:3000/hw/store