Skip to content

Feature(HW06): Create GitHub Actions & Workflows#134

Open
goodman74 wants to merge 1 commit into
OTUS-NET:mainfrom
goodman74:main
Open

Feature(HW06): Create GitHub Actions & Workflows#134
goodman74 wants to merge 1 commit into
OTUS-NET:mainfrom
goodman74:main

Conversation

@goodman74
Copy link
Copy Markdown

  • add ASP.NET.OTUS.github*

  • add Dockerfile.ci & global.json

  • add monorepo support

  • add .github\workflows\clean-ghcr.yml

  • add run Test in Docker fix .dockerignore
    tune Dockerfile
    tune docker-compose.Development.yaml
    add coverage.runsettings + add package

  • add docker-compose.test.yaml для тестирования опубликованного GHCR image

- add ASP.NET.OTUS\.github\*
- add Dockerfile.ci & global.json
- add monorepo support
- add .github\workflows\clean-ghcr.yml

- add run Test in Docker
fix .dockerignore
tune Dockerfile
tune docker-compose.Development.yml
add coverage.runsettings + add package

- add docker-compose.test.yml для тестирования опубликованного GHCR image
@goodman74
Copy link
Copy Markdown
Author

force-pushed (исправление имен у файлов)

@goodman74
Copy link
Copy Markdown
Author

Общее

Уточнения .dockerignore

  • В .dockerignore находятся строки, которые не работают в этом проекте, так как .git находится выше текущего build context, и Docker всё равно не может включить эти файлы в образ (я их удалил).
  • Дополнительно нужно исключить папки:
    **/publish/
    **/TestResults/

Уточнение docker-compose

Перенесён docker-compose.Development.yml из ../ в папку src рядом с Dockerfile.

  • Уточнён build.context для корректной сборки образа
  • Добавлено имя контейнера

Запуск тестов в Dockerfile

Уточнение Dockerfile для запуска в нем тестов (в рамках docker build)

  • Улучшено кеширование слоёв при сборке — вынесено копирование .csproj/.sln до restore, чтобы повторно использовать слой с зависимостями при изменении исходного кода
  • Добавлена Stage test который всегда выполняет до Stage publish (без прохождения который образ не будет создан),
    в процессе генерятся артефакты которые можно получить при необходимости получить (в рабочий образ см. п.5 ни тесты ни его артефакты не включаются).
    Дополнительно используется PromoCodeFactory.UnitTests/coverage.runsettings для настройки отчета покрытия тестами.

Получения артефактов выполнения тестов, через промежуточный образ (--target test)

docker build --target test -t test-build .
docker create --name tmp test-build
docker cp tmp:/test-results/. ./TestResults
docker rm tmp

Получения артефакта "степень покрытия тестами"

Дополнительно (к отчету trx) генерится отчет покрытия тестами (coverage.cobertura.xml), для его просмотра нужен "reportgenerator",
Результат будет в TestResults/CoverageReport/index.html

cd "H:\_ASP.NET\ASP.NET.OTUS\Homeworks\06 Настройка CI\src"
reportgenerator -reports:TestResults\*\coverage.cobertura.xml -targetdir:TestResults\CoverageReport -reporttypes:Html -sourcedirs:./

Запуск финального образа (прошедшего тесты)

Запуск через docker compose (все параметры через docker compose, тесты выполнились, но в образ не включаются)

cd "H:\_ASP.NET\ASP.NET.OTUS\Homeworks\06 Настройка CI\src"
docker compose -f docker-compose.Development.yml build
docker compose -f docker-compose.Development.yml up -d

Создать Github Actions + Настройка триггера

CI = push → test + build + push image
CD = Manual Deployment (запуск smoke test на образе из GHCR)

CI — автоматический, CD — ручной.

В рамках CI тесты выполняются через отдельный step Github Actions (см. Относительно CI vs Docker Build Testing Strategy.pdf)
"Возможность ручного запуска воркфлоу" сделано только для CD (целесообразнее)

Проверка работы опубликованного образа

docker-compose.test.yml — используется для проверки опубликованного GHCR image

В рамках него дополнительно добавлен сервис smoke который запускает smoke test

cd "H:\_ASP.NET\ASP.NET.OTUS\Homeworks\06 Настройка CI\src"
docker logout ghcr.io
docker compose -f docker-compose.test.yml pull

docker compose -f docker-compose.test.yml up --abort-on-container-exit --exit-code-from smoke
#запускает контейнер и выполняет smoke тест (и после это все останавливается), в логах отчет о выполнении.

Можно дополнительно поднять только сервис с GHCR image (promocode-factory-api_ghcr), тогда можно тестировать руками.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant