Continuous integration 如何定期运行gitlab阶段?

Continuous integration 如何定期运行gitlab阶段?,continuous-integration,gitlab,Continuous Integration,Gitlab,如何定期运行gitlab阶段?我知道此处记录的管道计划:。我只对运行分支的特定测试阶段感兴趣。问题是,我想针对的分支机构还有很多其他阶段。一个选项可能是在脚本部分引入一个变量,该变量表示如果为true,则执行脚本。但是,这可能会很麻烦,并且需要对考虑中的特定分支的ci文件的所有阶段进行大量更改。您可以使用only/except关键字或更高级的rules关键字以及管道源变量来控制作业何时运行 仅带有的示例: scheduled_test: stage: tests image: my_im

如何定期运行gitlab阶段?我知道此处记录的管道计划:。我只对运行分支的特定测试阶段感兴趣。问题是,我想针对的分支机构还有很多其他阶段。一个选项可能是在脚本部分引入一个变量,该变量表示如果为true,则执行脚本。但是,这可能会很麻烦,并且需要对考虑中的特定分支的ci文件的所有阶段进行大量更改。

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

仅带有
的示例

scheduled_test:
  stage: tests
  image: my_image:latest
  only:
    - schedules
  script:
    - ./run_some_things.sh
通过
only
关键字,您可以定义一些条件,这些条件表示“仅当这些条件为真时,此作业才会运行”,并提供了检查管道源的快捷方式
schedules
意味着管道是从一个计划启动的,而不是从一个push、trigger等启动的。
except
关键字正好相反。如果作业有
except:schedules
,则该作业将始终运行,除非已计划。您可以在此处查看
only/except
关键字的完整文档:

从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\u PIPELINE\u SOURCE
,查看是什么启动了此管道。如果是“时间表”,我们总是运行此作业。例如,如果源是“push”(因此管道是由
gitpush
命令启动的),则此作业将永远不会运行。使用
规则
关键字,所有
if
语句都在一起,因此上面的示例显示,
如果源是schedule,则始终运行;如果源是push,则从不运行
。但是,如果满足以下条件,则可以在同一时间将多个条件和多个条件放在一起:

rules:
  - if: '$CI_PIPELINE_SOURCE == "push" && $MY_CUSTOM_VARIABLE == true'
    when: manual

您可以在此处阅读
规则
关键字的完整文档:

将阶段提取为单独的管道,并使用将其与现有管道保持在一起。此外,请安排独立管道。谢谢!我最终使用了except关键字(由于gitlab版本),到目前为止,它似乎在我的测试中起作用。是的,
only
except
是做这些事情的唯一方法,直到
规则
提供了更多选项。很高兴你能让它工作!