GitLab CI - 仅在计划的管道上自动运行任务

问题描述 投票:0回答:2

我需要一个可以手动执行或按夜间计划自动运行的任务。我找到了这个解决方案:

  rules:
    - changes:
      - scheduled
      when: always
    - when: manual

该解决方案的问题是,当创建新管道并且任务未运行时,管道将陷入阻塞状态,直到我手动运行它。

为了避免这种情况,我找到了一个建议的解决方法来添加:

 allow_failure: true

但这又带来了一个问题,如果任务在夜间运行时失败,那么管道不会失败,并且我不会收到电子邮件通知。

有办法解决这个问题吗?

gitlab gitlab-ci scheduled-tasks
2个回答
18
投票

您可以使用

allow_failure
有条件地设置
rules:
。因此,不要在作业上设置
allow_faulure:
键,而是在任何导致作业变为“手动”的规则中进行设置。

  rules:
    - changes:
      - scheduled
      when: always
    - when: manual
      allow_failure: true

此外,根据您的描述,最好使用如下规则:

myjob:
  rules:
    - if: $CI_PIPELINE_SOURCE == "schedule"
      when: always
      allow_failure: false
    - when: manual
      allow_failure: true

防止管道被此作业阻塞的另一种选择是让它在

.post
阶段运行,并使用
needs: []
让它立即运行。这样,它就永远不会导致其他作业等待它。

myjob:
  needs: []
  stage: .post
  # ...

4
投票

可能有更好的解决方案,但另一种解决方法可能是有两个单独的作业,其中包含规则并模板化其他所有内容。例如:

.build_template: &build_template
  image: ubuntu:18.04
  script:
    - echo "hello world"

build_manual:
  <<: *build_template
  when: manual
  except:
    - schedules

build_nightly:
  <<: *build_template
  only:
      - schedules
© www.soinside.com 2019 - 2024. All rights reserved.