如何定期 运行 gitlab stage?
How to run gitlab stage periodically?
如何定期 运行 一个 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
关键字允许您定义一些条件,意思是“如果这些条件为真,则此作业仅 运行s”,并提供 shorthand 来检查来源管道。 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
以查看是什么启动了此管道。如果是“日程”,我们总是 运行 这份工作。例如,如果源是“推送”(因此管道由 git push
命令启动),则此作业永远不会 运行。使用 rules
关键字,所有 if
语句都被或运算在一起,因此上面的示例显示为 if the source is schedule, always run OR if the source is a push, never run
。但是,您可以在同一个 if:
中同时使用 AND 多个条件
rules:
- if: '$CI_PIPELINE_SOURCE == "push" && $MY_CUSTOM_VARIABLE == true'
when: manual
您可以在此处阅读 rules
关键字的完整文档:https://docs.gitlab.com/ee/ci/yaml/#rules
如何定期 运行 一个 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
关键字允许您定义一些条件,意思是“如果这些条件为真,则此作业仅 运行s”,并提供 shorthand 来检查来源管道。 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
以查看是什么启动了此管道。如果是“日程”,我们总是 运行 这份工作。例如,如果源是“推送”(因此管道由 git push
命令启动),则此作业永远不会 运行。使用 rules
关键字,所有 if
语句都被或运算在一起,因此上面的示例显示为 if the source is schedule, always run OR if the source is a push, never run
。但是,您可以在同一个 if:
rules:
- if: '$CI_PIPELINE_SOURCE == "push" && $MY_CUSTOM_VARIABLE == true'
when: manual
您可以在此处阅读 rules
关键字的完整文档:https://docs.gitlab.com/ee/ci/yaml/#rules