Azure DevOps — обработка единого выпуска для отдельных репозиториев кода для пользовательского интерфейса и уровня API Dotnet

#azure #azure-devops #azure-pipelines #azure-pipelines-release-pipeline #azure-pipelines-build-task

#azure #azure-devops #azure-конвейеры #azure-pipelines-release-pipeline #azure-конвейеры-сборка-задача

Вопрос:

У меня есть отдельные существующие репозитории кода — один для Angular UI и один для .NET 4.7 API layer. В ручном процессе скомпилированный код пользовательского интерфейса помещается в папку wwwroot после выполнения публикации dotnet, а артефакты развертываются в службе приложений Azure. При попытке реализовать CI с использованием Azure DevOps мне пришлось создать два конвейера сборки для пользовательского интерфейса и серверной части. Похоже, что в конвейере выпуска мне нужно разархивировать артефакты, записать шаг копирования артефактов пользовательского интерфейса в wwwroot, а затем снова заархивировать его перед развертыванием в службе приложений.

Я могу только представить, что это не лучший подход. Учитывая, что я новичок в Azure DevOps, я хотел бы знать лучшие практики, особенно при работе с относительно устаревшим кодом. Я бы сохранил и пользовательский интерфейс, и уровень API в одном репозитории, если бы мог сделать это сейчас. Каков наилучший способ справиться с этим?

ОБНОВЛЕНИЕ — Могу ли я создать несколько репозиториев в одном конвейере сборки? На основе статьи — https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/multi-repo-checkout?view=azure-devops

Спасибо, АК

Ответ №1:

Да, у вас может быть несколько репозиториев.

 resources:
  repositories:
  - repository: MyGitHubRepo # The name used to reference this repository in the checkout step
    type: github
    endpoint: MyGitHubServiceConnection
    name: MyGitHubOrgOrUser/MyGitHubRepo
  - repository: MyBitbucketRepo
    type: bitbucket
    endpoint: MyBitbucketServiceConnection
    name: MyBitbucketOrgOrUser/MyBitbucketRepo
  - repository: MyAzureReposGitRepository # In a different organization
    endpoint: MyAzureReposGitServiceConnection
    type: git
    name: OtherProject/MyAzureReposGitRepo

trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

steps:
- checkout: self
- checkout: MyGitHubRepo
- checkout: MyBitbucketRepo
- checkout: MyAzureReposGitRepository

- script: dir $(Build.SourcesDirectory)
 

И с точки зрения вашего первоначального вопроса вы можете публиковать свои изменения и без их архивирования (установлено zipAfterPublish значение false):

 - task: DotNetCoreCLI@2
  inputs:
    command: publish
    publishWebProjects: True
    arguments: '--configuration $(BuildConfiguration) --output output_folder'
    zipAfterPublish: False
    workingDirectory: backend/app/
 

а затем скопируйте ваш wwwroot и архивированный wwwroot и ваше серверное приложение в два отдельных архива и опубликуйте их.

Ответ №2:

Я бы создал два конвейера сборки, которые публикуют пакет после каждой успешной сборки в ленте артефактов Azure.

Затем 1 разверните конвейер, который загружает оба пакета, и примените дальнейшую логику развертывания.

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

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