【问题标题】:What is the best strategy for building microservices in a mono repo?在单一存储库中构建微服务的最佳策略是什么?
【发布时间】:2018-10-25 05:28:12
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    我实际上已经设法使用 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。

    action repo 在这里https://github.com/dorny/paths-filter

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-05
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 2010-09-08
      • 1970-01-01
      相关资源
      最近更新 更多