如何定期运行 gitlab 阶段?我知道此处记录的管道计划:https://docs.gitlab.com/ee/ci/pipelines/schedules.html .我只对运行分支的特定测试阶段感兴趣。问题是我想要定位的分支涉及很多其他阶段。一种选择可能是在脚本部分引入一个变量,表示如果为真,则执行脚本。但是,这可能很麻烦,并且需要对所考虑的特定分支的 ci 文件的所有阶段进行大量更改。
最佳答案
您可以使用 only/except
控制作业何时运行关键字,或更高级的 rules
关键字以及管道源变量。
示例与 only
:
scheduled_test:
stage: tests
image: my_image:latest
only:
- schedules
script:
- ./run_some_things.sh
only
关键字允许您定义一些条件,表示“只有在这些条件为真时才运行此作业”,并提供了检查管道源的速记。 schedules
意味着管道是从计划启动的,而不是从推送、触发器等开始的。except
关键字正好相反。如果它有 except: schedules
除非已安排,否则该作业将始终运行。您可以查看 only/except
的完整文档。这里的关键词:https://docs.gitlab.com/ee/ci/yaml/#onlyexcept-basic从 Gitlab 12.3 版开始,
rules
关键字扩展了 only/except
的可能性选项。我们可以从上面的例子中得到相同的结果,如下所示:scheduled_test:
stage: tests
image: my_image:latest
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
when: always
- if: '$CI_PIPELINE_SOURCE == "push"'
when: never
在这个例子中,我们检查预定义的变量 $CI_PIPELINE_SOURCE
看看是什么启动了这条管道。如果是"dispatch",我们总是运行这个工作。例如,如果源是“push”(因此管道是由 git push
命令启动的),则此作业将永远不会运行。与 rules
关键字,所有 if
语句被 OR 运算在一起,所以上面的例子是,if the source is schedule, always run OR if the source is a push, never run
.但是,如果出现以下情况,您可以将多个条件 AND 放在一起:rules:
- if: '$CI_PIPELINE_SOURCE == "push" && $MY_CUSTOM_VARIABLE == true'
when: manual
您可以阅读 rules
的完整文档。这里的关键词:https://docs.gitlab.com/ee/ci/yaml/#rules
关于continuous-integration - 如何定期运行 gitlab stage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65910754/