如何拥有另一个阶段的“实例”?

时间:2021-01-29 23:00:37

标签: gitlab gitlab-ci

我有平常的

library(dplyr)
data <- data %>%
         mutate(parameter = droplevels(factor(parameter,
          levels = c(v1, sort(setdiff(parameter, v1))))))

工作正常

现在我需要做一些完全不相关的事情——每半夜下载一堆东西 我设置了预定的作业,但它强制需要一个阶段

但如果我添加一个阶段“download_stuff”,它显然将成为该管道的一部分,意味着一些连续的步骤

我不想这些,下载完全不相关,不应该是该序列的一部分

基本上我想要这个

stages:
 - build
 - test
 - deploy

有什么办法可以做到这一点,其他人想要强行将其添加到阶段,然后到处pipeline_a: stages: - build - test - deploy pipeline_b: stages: - "download_stuff" ?似乎是一个很大的设计缺陷,除非我愚蠢地遗漏了一些明显的东西

1 个答案:

答案 0 :(得分:1)

目前无法定义两个单独的管道。您可以包含来自其他管道定义的阶段和作业,但在运行时它仍被视为一个管道。阻止某些作业按计划运行的唯一方法是使用您提到的 only 或更新的语法 rules

使用 only,您可以使某些作业仅在预定时运行:

download_job:
  stage: downloads
  only: schedules
  ..

对于构建/测试/部署作业,反之亦然:

build_job
  stage: build
  except: schedules

rules 关键字比 only/except 新,可让您在需要时编写更复杂的条件。

download_job:
  stage: downloads
  when: never
  rules:
    - if: "$CI_PIPELINE_SOURCE == 'schedules'"
      when: always
      allow_failure: true
      start_in: 3 hours
    - if: "$CI_COMMIT_REF_NAME == 'main'"
      when: manual

当有多个 if 时,它们会被 OR 运算在一起,但您可以使用 ||&& 内联来制定更复杂的规则:

...
  rules:
    - if: "$CI_PIPELINE_SOURCE == 'schedule' && $GITLAB_USER_EMAIL == 'myemail@me.com'
      when: manual
  ..