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



    Привет, Хабр! Продолжаю делать интернет магазин на 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
    за найденные ошибки в цикле статей
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 0

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

    Самое читаемое