Sim*_*ost 15 continuous-integration gitlab gitlab-ci devops
我们正在与 GitLab CI 合作,刚刚发生了一个奇怪的行为。我们尝试仅在文件发生更改并且处于合并请求而不是简单的 git 分支时运行给定作业(例如,lint如下所示) 。*.py例如,如果我要在 上推送更改Readme.MD,则此处管道的作业Lint将在不应该执行的地方执行。
.gitlab-ci.yml配置:
image: python:3.7
stages:
- pre-build
- test
.ci_rules:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_IID'
changes:
- tests/*.py
- tests/*/*.py
- src/*.py
- src/*/*.py
- if: $CI_COMMIT_REF_NAME == "develop"
- if: $CI_COMMIT_REF_NAME == "main"
lint:
stage: pre-build
script:
- pip install flake8
- flake8
rules:
- !reference [ .ci_rules, rules ]
# [... other jobs not relevant for the issue]
Run Code Online (Sandbox Code Playgroud)
cze*_*nde 28
问题出在你的工作规则上。以下是您的编号规则,以便更好地定位:
\n1. $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_IID && changes\n2. $CI_COMMIT_REF_NAME == "develop"\n3. $CI_COMMIT_REF_NAME == "main"\nRun Code Online (Sandbox Code Playgroud)\n让我们根据您的规则考虑一些示例、变量值和工作评估结果。请记住,如果您在规则定义中不使用when关键字,则作业评估只需要规则集中的一个规则即可触发作业。
1. rule \xe2\x9c\x85\n2. rule \xe2\x9c\x85\n3. rule \xe2\x9d\x8c\n---\njob evaluation = \xe2\x9c\x85 \nRun Code Online (Sandbox Code Playgroud)\n1. rule \xe2\x9d\x8c\n2. rule \xe2\x9c\x85\n3. rule \xe2\x9d\x8c\n---\njob evaluation = \xe2\x9c\x85 \nRun Code Online (Sandbox Code Playgroud)\n1. rule \xe2\x9d\x8c\n2. rule \xe2\x9d\x8c\n3. rule \xe2\x9d\x8c\n---\njob evaluation = \xe2\x9d\x8c\nRun Code Online (Sandbox Code Playgroud)\n1. rule \xe2\x9d\x8c\n2. rule \xe2\x9c\x85\n3. rule \xe2\x9d\x8c\n---\njob evaluation = \xe2\x9c\x85 \nRun Code Online (Sandbox Code Playgroud)\n1. rule \xe2\x9d\x8c\n2. rule \xe2\x9d\x8c\n3. rule \xe2\x9c\x85\n---\njob evaluation = \xe2\x9c\x85 \nRun Code Online (Sandbox Code Playgroud)\n你已经看到了吗?我认为你的问题是你的规则 2. 和 3. 与规则 1 混合在一起。因此,如果你创建 MR 而不更改文件,但你的源分支是 develop,则作业规则将被评估为 true (第二个示例)。我建议将规则 1. 放在单独的作业(或模板)中。或者使用带有when关键字的规则并手动控制它。
| 归档时间: |
|
| 查看次数: |
31697 次 |
| 最近记录: |