我有一个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文件的内容。
答案 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。