Рубрики
Uncategorized

Пикштарты DEVOPS трубопроводов

Итак, Azure DevOps … В эти трудные времена с блокировками и распространяющимся вирусом, он становится увеличением … Теги с DevOps, Azure, YAML, Dotnet.

Итак, Azure DevOps … В эти трудные времена с блокировками и распространяющимся вирусом становится все более важным и актуальным, чтобы отразить на Автобус-фактор Отказ Не только с точки зрения команды программного обеспечения, но с бизнес-критической точки зрения. Кроме того, быстрее и последовательная доставка — отличный бонус.

Пришло время развертывать принципы DEVOPS, так что то, что когда-то использовалось в ручном процессе, автоматизирован и интегрирован в хорошо поведение рабочих процессов и одноклим или менее выпусков.

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

Мы получили исходный код и некоторые заметки от разработчика о том, как публиковать проект.

Новая территория, давайте сделаем некоторую землю. Первый шаг — создать новый проект для нашего приложения с именем Финансовая приборная панель Отказ

Который затем приводит к экрану приветствия для проекта

Быстрый TL: DR для каждого доступе

  • Обзор
    • Ваша приборная панель. Может быть настроен с такими вещами, как информацию о проекте и виджеты
  • Доски
    • Инструменты управления проектами, такие как отставание, доски, спринты
  • Репо
    • Репозитории кода (проект DEVOPS может содержать несколько репозиториев), ветвей и управление запросами на тягу
  • Трубопроводы
    • Создание и освобождение управления трубопроводом
  • Планы испытаний
    • Функциональная насыщенная платформа для тестирования
  • Артефакты
    • Артефактные корма для пакетных платформ, таких как Nuget, NPM, PIP и т. Д.

Мы сосредоточимся на Репо и Трубопроводы Особенности во время этого поста.

Наша кодовая база является недавно созданным приложением ASPNET CORE с угловой интерфейсом ( Dotnet New Angular ). Угловое приложение было немного обновлено для поддержки охвата теста и кода в нашем конвейере постройки DEVOPS.

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

Мы создали нашу финансовую приборную панель с помощью поддержки Git. Используйте свой любимый инструмент Git, чтобы нажать свой код на вновь созданный репозиторий.

Код на месте — проверьте. Время ввести принципы CI/CD. На данный момент мы будем держать вещи простыми, касаясь только что касается главной ветви и игнорируя другие вещи, такие как запросы на тягу.

Автоматическая сборка на push

Первый шаг состоит в том, чтобы создать построенный трубопровод, который вызывает, когда новый код подталкивается на наш репозиторий. Язык, используемый для описания этих шагов, называется YAML.

Определенный трубопровод является разделенным на 2 этапа. Первый запускает две задания параллельно (если поддерживается), dotnet и задания NPM, где оба строятся и запускают любые связанные тесты. Во время этого мы можем ускорить нашу начальную стадию и проверить как нашу бэкэнд, так и в интерфейсе одновременно.

Если первый этап преуспел, и все тесты выполнены успешно, 2. Этап инициируется. Этот этап звонит dotnet publish Для создания нашего окончательного скомпилированного приложения, а затем копирует выход на наш каталог артефакта. Это можно рассматривать как наш продукт построения трубопровода, который мы позже будем использовать в нашем выпускном конвейере, при развертывании приложения.

trigger:
- master

pool:
  vmImage: 'windows-latest'

variables:
  dotnetConfiguration: 'Release'
  angularConfiguration: '--prod'
  angularClientSrc: 'src/YourOrg.FinancialDashboard/ClientApp'
  dotnetBackendSrc: 'src/YourOrg.FinancialDashboard/YourOrg.FinancialDashboard.csproj'

stages:
- stage: BuildAndTest
  jobs:
  - job: 'Dotnet'
    steps:
    - task: DotNetCoreCLI@2
      displayName: 'dotnet restore'
      inputs:
        command: restore
        projects: 'src/**/*.csproj'

    - task: DotNetCoreCLI@2
      displayName: 'dotnet build'
      inputs:
        command: build
        projects: 'src/**/*.csproj'
        arguments: '--configuration $(dotnetConfiguration)'

    - task: DotNetCoreCLI@2
      displayName: 'dotnet test'
      inputs:
        command: test
        projects: 'src/**/*Tests/*.csproj'
        arguments: '--configuration $(dotnetConfiguration)'

  - job: 'Npm'
    steps:
    - task: Npm@1
      displayName: 'npm install'
      inputs:
        command: 'install'
        workingDir: '$(angularClientSrc)'

    - task: Npm@1
      displayName: 'build angular client'
      inputs:
        command: custom
        customCommand: run build -- $(angularConfiguration)
        workingDir: '$(angularClientSrc)'

    - task: Npm@1
      displayName: 'angular client test'
      inputs:
        command: 'custom'
        workingDir: '$(angularClientSrc)'
        customCommand: 'run test -- --watch=false --code-coverage'

    - task: PublishCodeCoverageResults@1
      displayName: 'publish angular client code coverage results'
      condition: succeededOrFailed()
      inputs:
        codeCoverageTool: Cobertura
        summaryFileLocation: '$(angularClientSrc)/coverage/cobertura-coverage.xml'
        reportDirectory: '$(angularClientSrc)/coverage'
        failIfCoverageEmpty: true

    - task: PublishTestResults@2
      displayName: 'publish angular client test results'
      condition: succeededOrFailed()
      inputs:
        testResultsFormat: 'JUnit'
        testResultsFiles: 'TESTS*.xml'
        searchFolder: '$(angularClientSrc)/junit'
        failTaskOnFailedTests: true
        testRunTitle: 'Angular'

- stage: PublishApplication
  jobs:
  - job: PublishApplication
    steps:
    - task: DotNetCoreCLI@2
      displayName: 'dotnet publish'
      inputs:
        command: 'publish'
        publishWebProjects: true
        arguments: '--configuration $(dotnetConfiguration) --runtime win-x86 --output $(Build.ArtifactStagingDirectory)'
        zipAfterPublish: false

    - task: PublishBuildArtifacts@1
      displayName: 'public artifacts'
      inputs:
        pathtoPublish: '$(Build.ArtifactStagingDirectory)' 
        artifactName: 'financial-dashboard'

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

Триггер развертывания

С изданным артефактом готов, пришло время создать трубопровод развертывания. Для этого мы будем использовать вновь созданный артефакт сборки.

Опубликованный артефакт создается как автономное приложение, ориентированное на Win-X86. Для этого конкретного развертывания мы будем использовать FTP, поскольку хостинг-машина является внешним без доступа к IIS. Если вы используете любые размещенные настраиваемые услуги или имеете доступ к IIS, определенные задачи развертывания существуют, которые управляют и публикуют наши артефакты, при этом обрабатывает такие вещи, как управление экземплярами, настройки переменных выпуска и временно останавливая любые запускные приложения.

У нас нет никакой базы данных в нашем примере, но вы можете легко управлять развертыванием к этим серверам тоже. Использование структуры сущности? Создайте сценарий обновления миграции во время сборки, используйте встроенную задачу развертывания базы данных, и вы закончите.

И это все. Теперь мы реализовали концепции DEVOPS так, что когда мы нажимаем код на наш репозиторий, он автоматически запускает сборку, которая проходит и проверяет тесты. Если успешно, сгенерированный артефакт, затем передается на трубопровод развертывания, который автоматически выпускает наше приложение. Я начал наше с Однокливые релизы … Но как насчет Нет кликов релизов 😉

Если у вас есть какие-либо вопросы о DEVOPS, есть вопросы или хотите узнать больше о конкретных этапах, не стесняйтесь комментировать ниже

Оригинал: «https://dev.to/itminds/kickstarting-devops-pipelines-11h7»