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

Deploy individual services from a monorepo using github actions

我有大约 10 个独立的微服务,其中大部分是用于各种数据处理作业的云功能,它们都位于一个 github 存储库中。

目标是触发将这些服务选择性部署到 Google Cloud Functions,在推送到分支时 - 当单个功能已更新时。

我必须避免出现单个服务更新导致所有云功能部署的情况。

我当前的存储库结构:

/repo
--/service_A
----/function
----/notebook
--/service_B
----/function
----/notebook

附带说明一下,使用 Github Actions VS Google Cloud Build 进行此类自动化的 pros/cons 是什么?

GitHub Actions 支持带有工作流路径过滤的 monorepos。您可以创建工作流以在特定路径上的文件发生更改时有选择地触发。

https://help.github.com/en/articles/workflow-syntax-for-github-actions#onpushpull_requestpaths

例如,当路径 service_A/ 下的任何文件发生更改时,此工作流将触发推送(注意 ** glob 以匹配嵌套目录中的文件)。

on:
  push:
    paths:
      - 'service_A/**'

您还可以 运行 一些脚本来发现哪些服务根据 git diff 发生了变化,并通过 GitHub REST API 触发相应的作业。

可能有两个工作流 main.ymlservices.yml

主工作流 将配置为始终在推送 时启动,并且它只会启动脚本来找出更改了哪些服务。对于每个更改的服务 repository dispatch event 将在有效负载中使用服务名称触发。

服务工作流 将配置为在 repository_dispatch 启动,并且它将包含每个服务的一个作业。作业将有基于事件负载的附加条件。

查看具有类似设置的展示柜: https://github.com/zladovan/monorepo

答案是您切换到使用 NX.dev 并让它通过 nx affected deploy 命令为您解决