git - 在单一存储库中构建微服务的最佳策略是什么?

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

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

这很好用。但现在我正在尝试优化这个过程,我只希望它构建我一直在从事的特定服务。这意味着构建服务必须检测哪些文件夹已更改并仅构建这些服务。

我已经让这个过程在 Travis 上运行得很好,因为它有一个 GIT_COMMIT_RANGE 环境变量。所以我可以在最新推送中获取所有提交,然后在所有这些提交中获取已更改的文件夹.. 这真的很好.. 但是 仅限 在特 pull 维斯。

我希望删除 travis 并直接在 GCP 或我正在使用的任何其他 3rd 方容器构建器上构建我的 docker 镜像,但我只想构建已更改的文件夹。

我在想有可能用 git commit 钩子(Hook)来做到这一点。通过这个钩子(Hook),我可以开始生成一个文件夹列表来标记构建服务器来构建,甚至开始生成一个构建文件(cloudbuild.yaml)。然后在一些 git push 钩子(Hook)上,(甚至有一个 post-push 钩子(Hook))我在本地重置 cloudbuild.yaml 文件的内容。

最佳答案

我实际上已经设法使用 github 操作在不同的 repo 中解决了这个问题
对我来说幸运的是,有人创建了一个 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。
操作 repo 可在此处获得 https://github.com/dorny/paths-filter

关于git - 在单一存储库中构建微服务的最佳策略是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50349193/

相关文章:

ios - TestFlight:针对不同环境构建的 iOS 项目

c# - 如何在 .net core 2.2 webapi 中访问 GitLab CI CD 环境变量

javascript - 使用 GitLab 持续部署 NodeJS

git - 为什么即使我添加了我的电子邮件地址,Github 也没有显示我的贡献?

git 撤销删除的文件

mysql - codeigniter 限制查询不起作用

deployment - 使用 CI 时,如何保持环境清洁?

git - 如何以分离头模式将文件提交到分支

Git:无法创建符号链接(symbolic link)(文件名太长)

aws-lambda - 针对同一 Github 存储库中的不同项目的 AWS CI/CD 流程