Рубрики
Uncategorized

Рецепт: Azure DevOps Build Cover для ASP.NET CORE 3.x

Есть бесчисленные статьи о том, что такое постоянная интеграция и развертывание / доставка (CI / CD) и Ho … Теги с лазурным, дежоптом, трубопроводом, CI.

Существуют бесчисленные статьи о том, что такое непрерывная интеграция и развертывание/доставка (CI/CD) и как он помогает командам разработки приложений для доставки изменения кода более часто и надежно. CI/CD — это лучшая практика DEVOPS, потому что она обращается к смещению между разработчиками, которые часто хотят перемещать изменения, с операциями, которые хотят стабильные приложения. С помощью автоматизации на месте разработчики могут продвигать изменения, а операционные команды считают большую стабильность.

В этом сообщении я хотел бы предоставить простой рецепт NO-NONSENSE для создания непрерывного интеграционного трубопровода для приложения ASP.NET Core с использованием DEVOPS AZURE.

Трубопровод CI Основные шаги

Там может быть множество вариантов того, как структурировать конвейект сборки в зависимости от проектных зависимостей, окружающей среды и других факторов, но основные шаги будут одинаковыми для любого трубопровода.

  1. Получение кода из исходного управления.
  2. Строительные проекты.
  3. Выполнение тестов подразделения
  4. Выполнение анализа качества кода
  5. Производство развертываемого артефакта

Давайте посмотрим, как мы можем достичь этого в Azure DEVOPS.

Создание трубопровода.

В Azure DEVOPS теперь можно создать один многоступенчатый трубопровод для объединения стадий по сборке и выпуску, а также развертывание в нескольких средах. Мне все еще нравится идея разделения между сборкой и освобождением трубопроводов, поскольку она дает больше гибкости в том, как их можно запланировать и выполнять. Поэтому я создадим трубопровод YAML CI. Позже он может быть дополнен дополнительными шагами для преобразования его в полный цикл CI/CD. В Azure DEVOPS также есть возможность создать «классический» трубопровод. Разница состоит в том, что трубопровод YAML следует «инфраструктуру в качестве принципа кода», так как она хранится в контроле источника, и может быть отслежено и верситься вместе с кодом приложения. Это лучшая практика сейчас.

Настройка машины сборки

.СЕТЬ Основное приложение может быть построено либо на машинах Windows или Linux. Чтобы построить на машине Linux, нам нужно установить .NET Основная версия, которую ваши приложения цели. Если у вас есть некоторые библиотеки или зависимости, которые используют разные .NET Версия тогда она также должна быть установлена. Также на момент написания, чтобы построить функцию Azure, даже если было разработано с 3.x, вам все равно нужно 2,1 на сборке сборки. Я уверен, что будет исправлено в будущем, но это то, что нужно помнить, если ваша сборка не может. Во всяком случае, вот задачи для установки нужны .NET Основные версии:

- task: UseDotNet@2
  displayName: 'Use .NET SDK 2.1'
  inputs:
    packageType: 'sdk'
    version: '2.1.x'

- task: UseDotNet@2
  displayName: 'Use .NET SDK 3.0'
  inputs:
    packageType: 'sdk'
    version: '3.0.x'

Восстановление проектных зависимостей

Шаг для восстановления пакетов Nuget:

- task: DotNetCoreCLI@2
  displayName: 'Restore project dependencies'
  inputs:
    command: 'restore'
    projects: '**/*.csproj'

Построить проект

Основной шаг построения проекта: «» ЙАМЛ

  • Задача: DOTNETNECORECLI @ 2 DisplayName: «Создание проекта — $ (BuildConfiguration)»./ .csproj » » » ‘

Установка генератора отчетов для модульных тестов

При строительстве на Windows мы можем использовать встроенный коллектор данных для метрик покрытия кода. Однако, поскольку мы пытаемся создать универсальный трубопровод, который можно запускать как на Windows, так и в Linux, лучше использовать покрыватель. Для этого на работе ваши тестовые проекты подразделения должны включать две пакеты Nuget: * Coverlet.collector * CoverLet.msbuild Установите генератор отчетов на сборку.

- task: DotNetCoreCLI@2
  displayName: 'Install ReportGenerator'
  inputs:
    command: custom
    custom: tool
    arguments: 'install --global dotnet-reportgenerator-globaltool'

Пробеги тесты подразделения

Теперь мы готовы запускать тесты подразделения с вариантами для создания данных охвата кода

- task: DotNetCoreCLI@2
  displayName: 'Run unit tests - $(buildConfiguration)'
  inputs:
    command: 'test'
    arguments: '--no-build --configuration $(buildConfiguration) /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:CoverletOutput=$(Build.SourcesDirectory)/TestResults/Coverage/'
    publishTestResults: true
    projects: '**/Api.UnitTests.csproj'

Опубликовать отчет о покрытии кода

- script: |
    reportgenerator -reports:$(Build.SourcesDirectory)/**/coverage.cobertura.xml -targetdir:$(Build.SourcesDirectory)/CodeCoverage -reporttypes:HtmlInline_AzurePipelines
  displayName: 'Create code coverage report'

- task: PublishCodeCoverageResults@1
  displayName: 'Publish code coverage report'
  inputs:
    codeCoverageTool: 'cobertura'
    summaryFileLocation: '$(Build.SourcesDirectory)/**/coverage.cobertura.xml'

Создать развертываемый артефакт

Наконец, мы готовы создать артефакт, который может позже использовать в освобождении трубопровода для развертывания к разработке, постановке и производственной среде. Обратите внимание, что артефакт не меняется между этими средами. Мы должны развернуть ту же сборку, чтобы обеспечить стабильность и предсказуемость развертываний. Все конфигурации окружающей среды должны храниться отдельно.

- task: DotNetCoreCLI@2
  displayName: 'Publish the project - $(buildConfiguration)'
  inputs:
    command: 'publish'
    projects: '**/MyProject.Api.csproj'
    publishWebProjects: false
    arguments: '--no-build --configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/$(buildConfiguration)'
    zipAfterPublish: true

- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact: MyProjectApi'
  condition: succeeded()
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'MyProjectApi'
    publishLocation: 'Container'

Следующие шаги

Теперь, как у нас есть наш автоматический конвейер по сборке, вопрос в том, как часто мы хотим его выполнить? Есть несколько вариантов для этого. Это может быть вызвано каждым изменением, сделанным в главной ветви. Но если у вас есть большая команда с частыми изменениями, это может не быть практично, так как оно будет потреблять много ресурсов. В этом случае изменения могут быть получены, или сборка может быть сделана по расписанию, например, ежедневно. В конечном итоге, это для вашей команды разработки, чтобы решить. Не забывайте, что этот трубопровод — это только часть «Ci» в CI/CD, поэтому вам нужно также создать выпускной трубопровод. Это часть другой темы.

Резюме

В этом посте мы проходили по конкретным задачам, чтобы создать полный конвейер по сборке Core Core или Asure Function Function в Azure DEVOPS. Вот полный гист YAML для вашей справки:

Спасибо за чтение, а вот кошка (и трубопровод?) Для вас:

Фото Martin Krchnacek на Unsplash

Оригинал: «https://dev.to/ib1/a-recipe-azure-devops-build-pipeline-for-asp-net-core-3-x-p9k»