我有一个单声道存储库(git(,其中包含我正在处理的多个微服务。推送时,第三方生成服务会检测到此推送并开始处理生成和部署。
这很好用。但是现在我正在尝试优化这个过程,我只希望它构建我一直在研究的特定服务。这意味着生成服务必须检测哪些文件夹已更改并仅生成这些服务。
我已经让这个过程很好地处理了 Travis,因为它有一个GIT_COMMIT_RANGE环境变量。因此,我可以在最新的推送中获取所有提交,然后在所有这些提交中获取已更改的文件夹。这真的很好用..但仅限于特拉维斯。
我希望删除 travis 并直接在 GCP 或我正在使用的任何其他第三方容器构建器上构建我的 docker 映像,但我只想构建已更改的文件夹。
我认为可以使用 git 提交钩子来做到这一点。通过这个钩子,我可以开始生成要标记的文件夹列表,以便构建服务器构建,甚至可以开始生成构建文件(cloudbuild.yaml(。然后在一些 git 推送钩子上,(甚至有一个后推送钩子(我在本地重置了 cloudbuild.yaml 文件的内容。
我实际上已经设法使用 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