21 January

Blazor Client Side Интернет Магазин: Часть 2 — CI/CD

Website developmentProgramming.NETASPC#


Привет, Хабр! Продолжаю делать интернет магазин на Blazor. В этой части расскажу о том как я настроил 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



  1. CI_REGISTRY_PATH — путь к нашему registry ( в моем случае registry.hub.docker.com/victorcallidus)
  2. CI_REGISTRY_USER — наш аккаунт в resitry
  3. 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
за найденные ошибки в цикле статей
Tags:ci/cdBlazorspawebassemblyc#.netnet core
Hubs: Website development Programming .NET ASP C#
+7
3.5k 39
Leave a comment