Итак, 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»