#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. Вероятно, это правильный путь, потому что, если я проверю несколько репозиториев в одном конвейере, я не смогу запустить сборку для проверки в любой из ветвей. Это может быть возможно, но не уверен, что это усложнит ситуацию еще больше. Наличие двух отдельных конвейеров сборки может упростить задачу