27

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

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

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

我当前的存储库结构:

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

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

4

2 回答 2

51

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

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

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

on:
  push:
    paths:
      - 'service_A/**'
于 2019-09-27T14:40:39.757 回答
11

您还可以运行一些脚本来发现基于哪些服务被更改并通过GitHub REST APIgit diff触发相应的作业。

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

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

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

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

于 2020-03-02T20:00:31.293 回答