如何定期 运行 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