0

我有一个我正在组合的管道,它具有三个不同的“部署”步骤,每个步骤都有自己独特的部署,但可以由同一个作业触发。理想情况下,我想找到一种方法来“或”需求部分中的项目,以使该作业在之前的其中一个作业完成后自动运行。

我知道我可以为每个工作创建一个单独的工作来“运行”,但如果可能的话,我想避免重复自己。


Int (Dry Run):
  extends: .stageBatchDryRunJob
  stage: Deploy Non-Prod
  except:
    variables:
      - $CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+\.[0-9]+$/
  variables:
    <<: *hubNonVars
    kube_cluster_id: HubInt
    kube_env: int
  environment: int


Int (Rollback):
  extends: .stageBatchRollbackJob
  stage: Deploy Non-Prod
  except:
    variables:
      - $CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+\.[0-9]+$/
  variables:
    <<: *hubNonVars
    kube_cluster_id: HubInt
    kube_env: int
  environment: int

我想要一个需要完成上述两个工作之一的“运行”工作。

Int (run):
  extends: .run-batch
  variables:
    TOWER_JOB_TEMPLATE: $TOWER_JOB_TEMPLATE_INT
    kube_cluster_id: HubInt
    kube_env: int
  needs: [Int (Dry Run), Int (Rollback)] # can this be "or-ed?" IE needs Int (Dry Run) or Int (Rollback)

4

1 回答 1

0

如果这两个作业实际上都存在于管道中,则不。没有办法用一个工作来做你描述的事情并让下游工作立即开始。

但是,如果管道中仅存在两个作业中的一个(例如,规则配置排除了一个),则可以利用needs 可选功能。

needs:
  - job: "Int (Dry Run)"
    optional: true
  - job: "Int (Rollback)"
    optional: true

当然,这引入了当这些作业都不存在时作业可能运行的可能性。因此,您可能希望在您的作业中运行检查以查看是否存在预期的工件或变量。

您也可以使两份工作的方法更加干燥,您可以使用!reference 标签或其他 YAML 功能,如锚点/扩展(您已经在提供的代码中使用)。

于 2021-12-22T23:12:05.717 回答