如何定期运行gitlab stage?

Alb*_*ert 5 continuous-integration gitlab gitlab-ci

如何定期运行 gitlab 阶段?我知道此处记录的管道时间表: https: //docs.gitlab.com/ee/ci/pipelines/schedules.html。我只对运行分支的特定测试阶段感兴趣。问题是我想要定位的分支还涉及很多其他阶段。一种选择可能是在脚本部分引入一个变量,该变量表示如果为 true,则执行脚本。然而,这可能很麻烦,并且需要对所考虑的特定分支的 ci 文件的所有阶段进行大量更改。

Ada*_*all 7

only/except您可以使用关键字或更高级的rules关键字以及管道源变量来控制作业的运行时间。

示例only

scheduled_test:
  stage: tests
  image: my_image:latest
  only:
    - schedules
  script:
    - ./run_some_things.sh
Run Code Online (Sandbox Code Playgroud)

only关键字可让您定义一些条件,表示“此作业仅在这些条件为真时运行”,并提供检查管道源的简写。schedules意味着管道是从计划启动的,而不是推送、触发器等。except关键字正好相反。如果有,except: schedules该作业将始终运行,除非已计划。您可以在此处查看关键字的完整文档only/excepthttps ://docs.gitlab.com/ee/ci/yaml/#only except-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
Run Code Online (Sandbox Code Playgroud)

在此示例中,我们检查预定义变量$CI_PIPELINE_SOURCE以查看启动此管道的内容。如果是“计划”,我们总是运行这项工作。例如,如果源是“push”(因此管道是通过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
Run Code Online (Sandbox Code Playgroud)

您可以在此处阅读该关键字的完整文档rules: https: //docs.gitlab.com/ee/ci/yaml/#rules