问题描述
美好的一天,我的 gitlab-task 有这个规则
workflow:
rules:
- if: '$CUSTOM_ENV'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS'
when: never
- if: '$CI_COMMIT_BRANCH'
- when: always
...
myTask:
stage: build
script:
- "SOME SCRIPT"
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CUSTOM_ENV'
when: manual
...
myTask 在所有 merge_request_event 中运行。如何创建在(rebase + push)之后不运行 myTask 的“if”?
解决方法
没有什么特别可以将 rebase 和 push 与任何其他推送事件区分开来。
但是,您可以为此提供 git push options:
git push -o ci.variable="SKIP_MY_TASK=true"
然后在您的 yaml 中:
- if: '$SKIP_MY_TASK && $CI_PIPELINE_SOURCE == "push" && $CI_OPEN_MERGE_REQUESTS && $CI_COMMIT_BRANCH'
when: never
如果您从 UI 重新设置基准,您或许可以在 CI/CD 设置中设置此变量,然后再取消设置。
,我同意@sytech,它可以工作,但不能解决我的问题。 Сolleagues 向我推荐了 WA:
在我按下 Gitlab 界面中的“Rebase”按钮之前,我可以为我的 MR 设置 scepial-label(即skip-myTask)。一键操作。之后,我为 myTask 添加新规则。
- if: '$CI_MERGE_REQUEST_LABELS =~ /.*skip-myTask.*/'
when: manual
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CUSTOM_ENV'
when: manual
请务必保存此订单,否则 myTask 将运行。
抱歉我的问题不太准确!