在Gitlab CI中,如何仅在特定文件集合发生更改时触发构建?
是否有一种方法可以包含或排除某些文件以避免触发构建?例如:更新README.md
、.gitignore
等文件不应该导致触发构建。
在Gitlab CI中,如何仅在特定文件集合发生更改时触发构建?
是否有一种方法可以包含或排除某些文件以避免触发构建?例如:更新README.md
、.gitignore
等文件不应该导致触发构建。
更新2
看起来only/except
是一个不稳定的功能。文档建议使用rules:changes
代替:
job:
script:
- build # replace with your build command
rules:
- changes:
- /*.{java, py} # ... or whatever your file extension is
- dockerfiles/**/* # all files under folder 'dockerfiles'
更新1::
如Gajus 在评论中提到的那样,现在是可能的!
合并请求: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/21981
文档: https://docs.gitlab.com/ee/ci/yaml/#onlyexcept-basic(感谢Connor Shea在评论中的提示)
原始帖子:
不,现在不可能!
我认为这就是你要找的问题:https://gitlab.com/gitlab-org/gitlab-ce/issues/19232 - 这是一个非常受欢迎的问题(超过100个赞)。
里程碑已更改为未来3-6个月,4个月前。(https://gitlab.com/gitlab-org/gitlab-ce/issues/19232#note_31943850) 我希望我们很快就能看到这个功能。
更新:截至11.4版本,现在已经可以实现,详情请参见 https://docs.gitlab.com/ee/ci/yaml/#ruleschanges
原文:
目前GitLab CI不能根据编辑过的文件有条件地触发构建。
我之前也考虑过这个功能,我认为对于许多不同的用例来说,这可能非常有用。
我找到的最接近此功能的问题是 https://gitlab.com/gitlab-org/gitlab-ce/issues/23010
总之,回答你的问题:
现在你无法真正做到这一点,即使是手动操作,因为没有办法确定合并请求是否更改了文件,因为CI没有合并请求的概念。
应该很快就会添加Pipelines“理解”Merge Requests的功能。
当与only
规则结合使用时,这对我很有效。
build-web-dev:
stage: build
script:
- build.sh
only:
- develop
- changes
web/*
Dockerfile.web
only
/accept
are deprecated in favour of rules
- Liamexcept
规则添加到所有相关的作业中,就像这样:build:
script: npm run build
except:
changes:
- "*.md"
更新文档(.md)不再触发整个流水线。
祝好!
only
/accept
are deprecated in favour ofrules
- Liam