使用 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.yml
和 services.yml
。
主工作流 将配置为始终在推送 时启动,并且它只会启动脚本来找出更改了哪些服务。对于每个更改的服务 repository dispatch event 将在有效负载中使用服务名称触发。
服务工作流 将配置为在 repository_dispatch 启动,并且它将包含每个服务的一个作业。作业将有基于事件负载的附加条件。
查看具有类似设置的展示柜:
https://github.com/zladovan/monorepo
答案是您切换到使用 NX.dev 并让它通过 nx affected deploy
命令为您解决
我有大约 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.yml
和 services.yml
。
主工作流 将配置为始终在推送 时启动,并且它只会启动脚本来找出更改了哪些服务。对于每个更改的服务 repository dispatch event 将在有效负载中使用服务名称触发。
服务工作流 将配置为在 repository_dispatch 启动,并且它将包含每个服务的一个作业。作业将有基于事件负载的附加条件。
查看具有类似设置的展示柜: https://github.com/zladovan/monorepo
答案是您切换到使用 NX.dev 并让它通过 nx affected deploy
命令为您解决