不同阶段的Gitlab CI执行时序

时间:2020-09-14 10:58:19

标签: continuous-integration gitlab gitlab-ci

我敢打赌,这只是我所缺少的一些愚蠢的事情,但是我应该如何创建我的gitlab-ci.yml文件,并计划将每个晚上执行多个阶段(每晚测试),并在周末执行一次一个阶段(每周测试集)?

当前,我的设置如下: 我想每晚执行的所有阶段都是相似的,只是名称更改了。

stage1:
  stage: stage1
  only:
  - schedules

  script:
  - my execute script
  
  allow_failure: true
  
  artifacts:
   when: always
   paths:
    - stuff here
   reports:
     junit: filename here

我也有每晚执行的时间表,可以在晚上18:00触发执行。

然后我要在每周六的上午10点每周执行一次该阶段:

stagex:
  stage: stagex
  only:
  - schedules
    - cron 0 10 * * 6

  script:
  - my execute script
  
  allow_failure: true
  
  artifacts:
   when: always
   paths:
    - stuff here
   reports:
     junit: filename here

上周六没有触发。 UI端没有单独的时间表。我应该在那里吗?关于如何获得它的任何指示?

我还希望能够通过一个按钮执行阶段x(每周一次),因此需要安排时间表。如果gitlab通过其他方式将其启动,则可以将其保持为非活动状态。我尝试通过将变量设置为阶段并将其放在UI端的方式来进行此尝试,但我没有使其以这种方式工作。

我肯定缺少某些东西...

1 个答案:

答案 0 :(得分:1)

如果我了解您的目标,那么您想

  • 仅在计划(每日)时执行stage1
  • 仅在计划(每周)或手动管道运行时执行stagex。

以下应完成此操作。您将需要设置每日和每周时间表。对于每周计划,您需要将SCHEDULED_JOB定义为“ stagex”;设置完时间表后,您可以按一下播放键,以便手动运行作业。

variables:
  SCHEDULED_JOB: "stage1"

stage1:
  stage: stage1
  rules:
   - if: '$CI_PIPELINE_SOURCE == "schedule" && $SCHEDULED_JOB == $CI_JOB_NAME'

  script:
  - my execute script
  
  allow_failure: true
  
  artifacts:
   when: always
   paths:
    - stuff here
   reports:
     junit: filename here
     
    
stagex:
  stage: stagex
    - if: '$CI_PIPELINE_SOURCE == "schedule" && '$SCHEDULED_JOB == $CI_JOB_NAME'
  script:
  - my execute script
  
  allow_failure: true
  
  artifacts:
   when: always
   paths:
    - stuff here
   reports:
     junit: filename here