userver: PORTO
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
PORTO

==Как собрать docker и запустить проверки CI==

  1. Cобрать базовый докер образ командой из ./Readme.md, находясь в корневой директории userver:
    docker build -t ghcr.io/userver-framework/ubuntu-22.04-userver-base:latest -f scripts/docker/base-ubuntu-22.04.dockerfile .
  2. Собрать CI образ докера, который основан на образе из п1, но содержит в себе дополнительные пакеты для CI
    docker build -t ghcr.io/userver-framework/ubuntu-22.04-userver-base-ci:latest -f scripts/docker/base-ubuntu-22.04-ci.dockerfile .
  3. Затем, необходимо запустить docker run -d ghcr.io/userver-framework/ubuntu-22.04-userver-base-ci:latest для того, чтобы сформировался контейнер, который будем экспортировать в порто слой, hash контейнера отобразиться в консоле
  4. Экспортируем командой
    docker export <hash_userver_docker_tag_container> -o ./layer.tar
    сформируется слой, который уже можно выгрузить в sandbox
  5. и выгружаем полученный слой командой
    ya upload ./layer.tar -T PORTO_LAYER_STRM_TRNS \
    --owner $(arc user-info --json | jq -r '.effective_login') --ttl 90 \
    -d "taxi porto layer for compile userver with cmake" \
    --attr platform=linux_ubuntu_22.04_jammy \
    --json-output
    где PORTO_LAYER_STRM_TRNS - тег, обозначающий что мы выгружаем порто слой, owner - владелец ресурса в sandbox, ttl - срок жизни ресурса в днях, d - описание, attr platform - платформа, на какой будет запущен наш контейнер, json-output - вывод результата в json формате

Результатом будет примерно такое сообщение:

{
"skynet_id": "rbtorrent:5e230328251ab8ef188c61266e502ee06942cc11",
"task": {
"url": "https://sandbox.yandex-team.ru/api/v1.0/task/1652353852",
"id": 1652353852
},
"resource_id": 4172730048,
"file_name": "layer.tar",
"download_link": "https://proxy.sandbox.yandex-team.ru/4172730048",
"resource_link": "https://sandbox.yandex-team.ru/resource/4172730048/view",
"md5": "e850d1fa2ccb11c572154ef778967df8"
}

из которого нам нужен resource_id

  1. Необходимо поменять ссылку на ресурс в файле, в проверках CMake, нужно найти строчку porto_layers и указать там, полученный ранее resource_id, после чего проверки в CI (CMake) должны обновиться с изпользованием нового контейнера.

PS (deprecated: сейчас загрузка на github packages автоматизировано нажатием на кнопку Deploy в интерфейсе GitHub):

  1. Чтобы обновить или создать новый докер образ на внешний GitHub, то необходимо
  • иметь разрешение на запись сюда, (обратитесь к @antoshkka)
  • необходимо получить токен для входа В интерфейсе GH, выберите Settings в профиле -> Developer settings -> Personal access tokens -> Generate new token (classic) и настройте токен, для деплоя и сохранения пакетов !!! Сохраните значение токена
  1. нужно залогиниться в ghcr.io
    docker login -u <github_username> ghcr.io
    в качестве пароля указать сохраненный выше токен
  2. Отправить пакет на публикацию, например так:
    docker push ghcr.io/userver-framework/ubuntu-userver-build-base:v1
  3. После чего, необходимо проверить, что пакет виден для внешнего пользования: выберите тут загруженный пакет выбрать Package settings и в Danger Zone выбрать Change package visibility - установить Public
  4. Внести изменения в файл docker-compose.yaml добавив или изменив контейнер для запуска докер образа для сборки userver P.S.: стоит проверить, что github CI не сломался при внесении изменений, в случае необходимости, можно поправить и там.