Azure DevOps - 为 UI 和 Dotnet API 层的单独代码存储库处理单个版本
Azure DevOps - Handling single release for separate code repositories for UI and Dotnet API layer
我有单独的现有代码存储库 - 一个用于 Angular UI 和一个用于 .NET 4.7 API 层。
在手动过程中,编译后的 UI 代码在执行 dotnet publish 后放置在 wwwroot 文件夹中,并将工件部署到 Azure 应用服务。
在尝试使用 Azure DevOps 实施 CI 时,我必须为 UI 和后端创建两个构建管道。
在发布管道中,看起来我必须解压缩工件,将 UI 工件的复制步骤写入 wwwroot,然后在部署到应用程序服务之前再次压缩它。
我只能想象这不是最好的方法。鉴于我是 Azure DevOps 的新手,我想了解最佳实践,尤其是在处理相对遗留代码时。如果我现在可以这样做的话,我会把 UI 和 API 层都保存在一个存储库中。处理此问题的最佳方法是什么?
更新 - 我可以在单个构建管道中构建多个存储库吗?
基于文章 - https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/multi-repo-checkout?view=azure-devops
谢谢,
AK
是的,你可以 multiple repo。
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 和您的后端应用程序到两个单独的档案中并发布它们。
我会创建两个构建管道,在每次成功构建到 Azure Artifact Feed 后发布一个包。
然后 1 个部署管道下载两个包并应用进一步的部署逻辑。
我有单独的现有代码存储库 - 一个用于 Angular UI 和一个用于 .NET 4.7 API 层。 在手动过程中,编译后的 UI 代码在执行 dotnet publish 后放置在 wwwroot 文件夹中,并将工件部署到 Azure 应用服务。 在尝试使用 Azure DevOps 实施 CI 时,我必须为 UI 和后端创建两个构建管道。 在发布管道中,看起来我必须解压缩工件,将 UI 工件的复制步骤写入 wwwroot,然后在部署到应用程序服务之前再次压缩它。
我只能想象这不是最好的方法。鉴于我是 Azure DevOps 的新手,我想了解最佳实践,尤其是在处理相对遗留代码时。如果我现在可以这样做的话,我会把 UI 和 API 层都保存在一个存储库中。处理此问题的最佳方法是什么?
更新 - 我可以在单个构建管道中构建多个存储库吗? 基于文章 - https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/multi-repo-checkout?view=azure-devops
谢谢, AK
是的,你可以 multiple repo。
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 和您的后端应用程序到两个单独的档案中并发布它们。
我会创建两个构建管道,在每次成功构建到 Azure Artifact Feed 后发布一个包。
然后 1 个部署管道下载两个包并应用进一步的部署逻辑。