在单声道回购中构建微服务的最佳策略是什么?

时间:2018-05-15 11:35:46

标签: git continuous-integration continuous-deployment continuous-delivery monorepo

我有一个mono repo(git),它包含我正在处理的多个微服务。在推送时,第三方构建服务检测到此推送并开始处理构建和部署。

这很有效。但现在我正在尝试优化这个过程,我只想建立我一直在努力的特定服务。这意味着构建服务必须检测哪些文件夹已更改并仅构建这些服务。

我已经让这个过程很好地适用于Travis,因为它有一个GIT_COMMIT_RANGE环境变量。所以我可以在最近的推送中获得所有提交,然后在所有这些提交中获取已更改的文件夹..这非常有效..但在travis上只有 ONLY

我希望直接在GCP或我正在使用的其他第三方容器构建器上剪切travis并构建我的docker镜像,但我只希望构建已更改的文件夹。

我认为可以使用git commit hook执行此操作。通过这个钩子,我可以开始生成一个文件夹列表,以标记要构建的构建服务器,甚至开始生成构建文件(cloudbuild.yaml)。然后在一些git push hook上,(甚至还有一个post-push hook)我在本地重置了cloudbuild.yaml文件的内容。

1 个答案:

答案 0 :(得分:0)

我实际上已经设法使用github操作在另一个回购中解决了这个问题

对我来说幸运的是,有人创建了一个github动作来过滤已更改的文件夹

- uses: dorny/paths-filter@v2
    id: changes
    with:
      filters: |
        src:
          - '<folder to check>/**'

在接下来的构建步骤中,如果路径过滤器返回true,则可以使用if语句触发该步骤:

- name: Build node
    if: steps.changes.outputs.src == 'true'
    run: |
      <command goes here>

如您所见,如果子文件夹中的任何内容已更改,src将返回true。

操作仓库位于https://github.com/dorny/paths-filter