Git Product home page Git Product logo

shri-infra-homework's Introduction

IP-адрес:

http://84.201.179.80:3000/hw/store/

Telegram

https://t.me/pageniy

Домашнее задание ШРИ: Инфраструктура

Вам уже знакомо это приложение, вы работали с ним во время выполнения домашнего задания по автотестам. Теперь вам предстоит добавить в него CI/CD.

Задача

Вам необходимо форкнуть этот репозиторий и добавить:

  • сборку Docker-образа, который содержит работающее приложение;
  • запуск тестов на каждый PR;
  • процессы для отведения релизной ветки и внесения фиксов;
  • деплой приложения на сервер.

Также вам будет нужно настроить виртуальную машину в Яндекс Облаке и Container Registry, для этого вам выдадут промокоды на 1500 рублей. IP-адрес этой машинки укажите в README, чтобы проверяющий мог открыть приложение, которое будет на ней запущено.

Репозиторий, который вы форкнули, должен быть публичным и настроен таким образом, чтобы никто не могу пушить ветку main, но любой человек мог:

  • запускать релизные флоу,
  • создавать пулл-реквесты и вливать их, если все проверки прошли успешно.

В файле ./src/client/pages/About.tsx замените [Your Name] на своё имя и поправьте тест, которы проверяет содержимое этой строчки.

Сборка образа

Вам необходимо подготовить Dockerfile и добавить скрипты в package.json для работы с Docker-образами.

Скрипт:

  • build:docker — собирает образ (с тегом shri-infra), который будет запускать приложение
  • start:docker — запускает последний собранный образа с тегом shri-infra на 3000 порту

Как настроить сервер в Яндекс Облаке

Создайте виртуальную машину (Compute Cloud), воспользовавшись инструкцией по ссылке:
https://yandex.cloud/ru/docs/compute/quickstart/quick-create-linux#create-vm

Рекомендуемые параметры:

  • Операционная система: Ubuntu 20.04
  • Диск: HDD на 10 Гб
  • Вычислительные ресурсы: 2vCPU, 2 Гб RAM
  • Включена опция «Публичный IP-адрес»

В итоге должно получиться чуть меньше 2 200 рублей в месяц — на две недели выполнения и проверки задания должно хватить.

Описание работы процессов CI/CD

  1. Флоу с проверками, который запускается при создании / изменении PR:

    • запускает параллельно линтер через npm run lint и тесты через npm run test

    • нужно настроить ограничение на мердж изменений, если проверки не прошли

  2. Флоу создания релиза, который запускается вручную (on: [workflow_dispatch]):

    • запускает параллельно линтер и тесты

    • здесь и дальше версией релиза будет считаться номер запуска флоу ${{ github.run_number }}

    • отводит от main релизуню ветку releases/<версия_релиза>

    • собирает docker-образ с двумя тегами тегами:

      • cr.yandex/<идентификатор_реестра>/app:<версия_релиза>
      • cr.yandex/<идентификатор_реестра>/app:<версия_релиза>_latest
    • загружает docker-образ в Container Registry (необходимо, чтобы реджистри отображались оба тега)

    • создаёт тег, с номером текущей версии, который указывает на последний коммит в главной ветке

    • создаёт Issue в GitHub, которое содержит всю важную информацию:

      • дату,
      • автора релиза (тот, кто запустил флоу),
      • номер версии (${{ github.run_number }}),
      • список коммитов от предыдущего релизного (или фиксрелизного) тега,
      • ссылку на docker-образом в Yandex Container Registry
        cr.yandex/<идентификатор_реестра>/app:<версия_релиза>
    • обновляет файл CHANGELOG.md в корне проекта, дописывает сверху новую версию в виде заголовка, а под ней — список коммитов от предыдущего релизного (или фиксрелизного) тега

  3. Флоу фикса к релизу, который запускается вручную:

    • принимает на вход версию релиза и все действия выполняет в ветке этого релиза

    • запускает параллельно проверку типов и тесты

    • собирает docker-образ с двумя тегами:

      • cr.yandex/<идентификатор_реестра>/app:<версия_релиза>_fix<номер_запуска_фиксрелизного_флоу>
      • cr.yandex/<идентификатор_реестра>/app:<версия_релиза>_latest
    • загружает docker-образ в Container Registry (в реджистри должен появиться образ с двумя тегами, у старого образа тег latest пропадёт)

    • создаёт тег с номером текущего релиза + пометкой fix и номером фикса

    • добавляет комментарий в Issue, который содержит:

      • дату фикса,
      • автора фикса (тот, кто запустил флоу),
      • список коммитов от предыдущего релизного (или фиксрелизного) тега
      • ссылку на docker-образом в Yandex Container Registry
        cr.yandex/<идентификатор_реестра>/app:<версия_релиза>_fix<номер_запуска_фиксрелизного_флоу>
  4. Флоу выкатки релиза в прод

    • принимает на вход версию релиза

    • проверяет, что существует образ в Container Registry с тегом <версия_релиза>_latest

    • по ssh запускает Docker-образ на виртуальной машине

    • в Issue добавьте комментарий о том, что релиз выкачен в прод c датой и человеком, который запустил выкатку в прод

Полезные ссылки

Запуск

# установите зависимости
npm ci

# соберите клиентский код приложения
npm run build

# запустите сервер
npm start

После этого можете открыть приложение в браузере по адресу http://localhost:3000/hw/store

shri-infra-homework's People

Contributors

2pageniy avatar cergmin avatar igorbarbashov avatar

shri-infra-homework's Issues

Release 57

Release 57:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 57
Список коммитов: df11758 add gh token 4ea47fa change structure workflow 802b472 test issue de9305a test issue a5bc45f test tag 6f1feb3 add tag, new branch, push docker
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:57

Release 32

Release 32:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 32
Список коммитов:
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:32

Release 24

Release 24:

Дата: workflow_dispatch
Автор: 2pageniy
Номер версии: 24
Список коммитов:
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:24

Release 63

Release 63:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 63
Список коммитов:
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:63

Release 48

Release 48:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 48
Список коммитов: c407f94 azxcdzxcxzc
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:48

Release 59

Release 59:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 59
Список коммитов: dae3b45 add update changelog
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:59

Release 40

Release 40:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 40
Список коммитов:
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:40

Release 50

Release 50:

Дата:
Автор: 2pageniy
Номер версии: 50
Список коммитов:
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:50

Release 52

Release 52:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 52
Список коммитов: fa0ad9c test
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:52

Release 61

Release 61:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 61
Список коммитов:
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:61

Release 67

Release 67:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 67
Список коммитов: f2d7949 add update changelog
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:67

Release 43

Release 43:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 43
Список коммитов: 7e8bd40 uncomment create branch
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:43

Release 54

Release 54:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 54
Список коммитов: 8b4ae17 888
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:54

Release 42

Release 42:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 42
Список коммитов: e5bd67e test commits show
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:42

Release 28

Release 28:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 28
Список коммитов:
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:28

Release 27

Release 27:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 27
Список коммитов: 4067f8a
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:27

Release 80

Release 80:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 80
Список коммитов: 45a821b fix indent
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:80

Release 60

Release 60:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 60
Список коммитов: f4e6bdf add update changelog
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:60

Release 46

Release 46:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 46
Список коммитов: 2e7f962 4
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:46

Release 65

Release 65:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 65
Список коммитов: f37ad6b add update changelog
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:65

Release 51

Release 51:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 51
Список коммитов: b246667 add display commits
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:51

Release 66

Release 66:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 66
Список коммитов: 86d5cf0 add update changelog
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:66

Release 44

Release 44:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 44
Список коммитов: $(git log --oneline v$prev_version..v$current_version)
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:44

Release 64

Release 64:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 64
Список коммитов: 57f87b7 add update changelog
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:64

Release 29

Release 29:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 29
Список коммитов:
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:29

Release 26

Release 26:

Дата: $(date +'%Y-%m-%d')
Автор: 2pageniy
Номер версии: 26
Список коммитов: f2ca502
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:26

Release 33

Release 33:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 33
Список коммитов:
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:33

Release 62

Release 62:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 62
Список коммитов:
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:62

Release 45

Release 45:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 45
Список коммитов: b121a73 3
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:45

Release 58

Release 58:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 58
Список коммитов: 7837741 add update changelog
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:58

Release 56

Release 56:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 56
Список коммитов: df11758 add gh token 4ea47fa change structure workflow 802b472 test issue de9305a test issue a5bc45f test tag 6f1feb3 add tag, new branch, push docker
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:56

Release 47

Release 47:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 47
Список коммитов: b4d7f9a 6
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:47

Release 53

Release 53:

Дата: 21-07-2024
Автор: 2pageniy
Номер версии: 53
Список коммитов: 'cfa2a9e 56'
Ссылка на docker-образ: cr.yandex/crpuv35ridrbq7gl8980/app:53

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.