Gitlab CI - 如何仅在特定文件集发生更改时触发构建

69

在Gitlab CI中,如何仅在特定文件集合发生更改时触发构建?

是否有一种方法可以包含或排除某些文件以避免触发构建?例如:更新README.md.gitignore等文件不应该导致触发构建。

5个回答

61

更新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) 我希望我们很快就能看到这个功能。


1
每次编辑 README 后,我们都需要提升库的版本,否则流水线将会失败。我是说,他们在想什么啊 :( - holms
似乎在第一次添加相关文件时,这个并没有触发。 - Mark
only/accept are deprecated in favour of rules - Liam

6

更新:截至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的功能。


1

当与only规则结合使用时,这对我很有效。

build-web-dev:
  stage: build
  script:
    - build.sh
  only:
    - develop
    - changes
      web/*
      Dockerfile.web

2
only/accept are deprecated in favour of rules - Liam

1
我在浏览网络时没有找到任何可行的解决方案,然后我回到官方的GitLab文档并尝试了他们所写的内容: https://docs.gitlab.com/15.7/ee/ci/jobs/job_control.html#onlychanges--exceptchanges-examples 在我的情况下,这似乎是一个可行的解决方案,关键是要将except规则添加到所有相关的作业中,就像这样:
build:
  script: npm run build
  except:
    changes:
      - "*.md"

更新文档(.md)不再触发整个流水线。

祝好!


0

该功能自11.4版本以来就已经可用。

请参见文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接