Привет, Хабр! Продолжаю делать интернет магазин на Blazor. В этой части расскажу о том как я настроил CI/CD для него. За подробностями добро пожаловать под кат.
Содержание
- Blazor + MVVM = Silverlight наносит ответный удар, потому что древнее зло непобедимо
- Blazor Client Side Интернет Магазин: Часть 1 — Авторизация oidc (oauth2) + Identity Server4
- Blazor Client Side Интернет Магазин: Часть 2 — CI/CD
Ссылки
Исходники
Образы на Docker Registry
Dockerfile
Добавляем Dockerfile c таким содержимым в проект сервера который будет раздавать наше SPA на Blazor
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["src/BlazorEShop.Spa.BlazorWasm/Server/BlazorEShop.Spa.BlazorWasm.Server.csproj", "src/BlazorEShop.Spa.BlazorWasm/Server/"]
COPY ["src/BlazorEShop.Spa.BlazorWasm/Client/BlazorEShop.Spa.BlazorWasm.Client.csproj", "src/BlazorEShop.Spa.BlazorWasm/Client/"]
RUN dotnet restore "src/BlazorEShop.Spa.BlazorWasm/Server/BlazorEShop.Spa.BlazorWasm.Server.csproj"
COPY . .
WORKDIR "/src/src/BlazorEShop.Spa.BlazorWasm/Server"
RUN dotnet build "BlazorEShop.Spa.BlazorWasm.Server.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "BlazorEShop.Spa.BlazorWasm.Server.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "BlazorEShop.Spa.BlazorWasm.Server.dll"]
Настройка переменных окружения для Gitlab
Переходим в раздел Settings -> CI/CD нашего репозитория. и выставляем там переменные окружения необходимые для публикации в Registry
- CI_REGISTRY_PATH — путь к нашему registry ( в моем случае registry.hub.docker.com/victorcallidus)
- CI_REGISTRY_USER — наш аккаунт в resitry
- CI_REGISTRY_PASSWORD — пароль от нашего аккаунта в registry
Gitlab CI/CD
Подключаем шаред раннеры или устанавливаем свой с возможностью сборки docker.
Добавляем в репозиторий файл .gitlab-ci.yml с таким содержимым
image: docker:19.03.1
variables:
DOCKER_HOST: tcp://docker:2375
DOCKER_TLS_CERTDIR: ""
BLAZOR_SPA_LATEST: ${CI_REGISTRY_PATH}blazor-eshop-spa-blazor:latest
BLAZOR_SPA_IMG_TAG: ${CI_REGISTRY_PATH}blazor-eshop-spa-blazor:$CI_COMMIT_REF_SLUG
services:
- docker:19.03.1-dind
stages:
- deploy_latest
- deploy_tag
- test
deploy_tag:
stage: deploy_tag
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY_PATH
- docker build -t $BLAZOR_SPA_IMG_TAG -f ./src/BlazorEShop.Spa.BlazorWasm/Server/Dockerfile .
- docker push $BLAZOR_SPA_IMG_TAG
only:
- tags
deploy_latest:
stage: deploy_latest
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY_PATH
- docker build -t $BLAZOR_SPA_LATEST -f ./src/BlazorEShop.Spa.BlazorWasm/Server/Dockerfile .
- docker push $BLAZOR_SPA_LATEST
only:
- master
test:
image: mcr.microsoft.com/dotnet/core/sdk:3.1-buster
stage: test
script:
- "dotnet test ./BlazorEShop.sln"
CI_COMMIT_REF_SLUG — эта переменная окружения которую Gitlab заполняет сам. Если это обычный коммит то сюда пишется название ветки (master, dev, stage и т.д.) если вы пушите тег то тут будет название тега. Например если пушнуть тег dev11 тогда CI_COMMIT_REF_SLUG=dev11.
Пример настройки docker-compose
Для запуска например через docker-compose.yml можно такие настройки использовать
version: '3.4'
services:
blazoreshop.spa.blazorwasm.server:
image: victorcallidus/blazor-eshop-spa-blazor:latest
environment:
- ASPNETCORE_ENVIRONMENT=Production
- ASPNETCORE_URLS=https://+:443;http://+:80
- ASPNETCORE_HTTPS_PORT=8003
- ASPNETCORE_Kestrel__Certificates__Default__Password=1234Qwert
- ASPNETCORE_Kestrel__Certificates__Default__Path=/root/.aspnet/https/blazor-eshop-spa-blazor.pfx
- SsoUri=https://localhost:8000
- ApiUri=https://localhost:8001
ports:
# - "7003:80"
- "8003:443"
volumes:
- ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
- ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro
Благодарности
Спасибо
ilekarev
russianssamovar
kxl
AlexNis
за найденные ошибки в цикле статей