在 monorepo Azure 中部署单一服务
Posted
技术标签:
【中文标题】在 monorepo Azure 中部署单一服务【英文标题】:Deploy single service in a monorepo Azure 【发布时间】:2021-03-09 21:10:57 【问题描述】:我正在使用 azure devops,我的项目是一个 monorepo,在 github 中包含多个服务主机。 每次我在一项服务中进行更改时,我都必须构建所有其他服务(循环遍历所有文件夹并构建)然后将其推送到结构。 如何配置 azure 以仅构建和推送已更改的项目? 这是我的解决方案文件夹结构
Microservices/
├── Service A/
├── Service B/
└── Service C/
谢谢
【问题讨论】:
【参考方案1】:很遗憾,没有现成的解决方案。一种解决方法是为服务设置多个管道,并由每个服务文件夹中的更改触发。例如:
Microservices/
├── azure-pipelines.yml
├── Service A/
|── azure-pipelines-a.yml
├── Service B/
|── azure-pipelines-b.yml
└── Service C/
|── azure-pipelines-c.yml
并使用路径过滤器来决定将触发哪个 yaml。例如:
trigger:
branches:
include:
- master
- releases/*
paths:
include:
- ServiceA/*
此外,您可以将Step templates 用于多个构建中使用的步骤。
【讨论】:
感谢您的解决方案我做了一些研究,发现我可以通过 powershell 从 git 获取最新更改,但这是针对 Azure Repo Git 的。如何使用 github 实现这一目标?我的想法是获取最新提交并检查路径并仅构建更改的项目 这里是powershell步骤步骤:-powershell:| $url="$(System.CollectionUri)/$(System.TeamProject)/_apis/git/repositories/$(Build.Repository.ID)/commits/$(Build.SourceVersion)/changes?api-version=5.1" $result = Invoke-RestMethod -Uri $url -Headers @Authorization = "Bearer $(System.AccessToken)" -Method GET $changesFolder = $result.changes | Where-Object$_.item.gitObjectType -match "tree" |选择对象-属性 $_.item.path powershell 脚本使用 Azure DevOps REST api,在 GitHub 中,您可以通过 Get a Commit API 获取提交,响应将包含一个files
数组和更改文件列表:@987654322 @。顺便说一句,有一个公共博客做了一些 Powershell 脚本来实现 mono repo 单一构建解决方案,这可能会给您另一种解决方案。你可以看看:dev.to/nikolicbojan/….以上是关于在 monorepo Azure 中部署单一服务的主要内容,如果未能解决你的问题,请参考以下文章
部署在 NX monorepo 中创建的 nestjs 服务器