在 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 中部署单一服务的主要内容,如果未能解决你的问题,请参考以下文章

Azure上部署FTP服务

使用 github 操作从 monorepo 部署单个服务

部署在 NX monorepo 中创建的 nestjs 服务器

部署 --- Nginx

在公有云AZURE上部署私有云AZUREPACK以及WEBSITE CLOUD

Azure 应用服务中托管的 API 列表的单一入口点