如何在gitlab“阶段”中定义规则,以便无需为作业定义单独的规则

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

假设分阶段定义了4个职位。

阶段:

  • 构建
  • 测试
  • 部署
  • 上传

现在测试、部署和上传仅在管道手动触发时运行。我们可以为此定义单独作业的规则,但它会重复。(不想使用它)

是否可以在“stages”上定义规则,以便一个作业将在自动触发器上运行,其余3个作业将在管道的手动触发器上运行。

gitlab gitlab-ci jobs git-stage gitlab-pipelines
2个回答
4
投票

恐怕目前还不可能将规则应用于整个阶段。

一种可能的解决方法是将阶段的所有作业放在单独的模板文件中。这包括动作可以有规则 [1]。

示例: 模板.yml

job1:
  stage: test
  script:
    - run_tests

job2:
  stage: deploy
  script:
    - do_deployment

job3:
  stage: upload
  script:
    - do_the_uploading

.gitlab-ci.yml:

include:
  - local: 'template.yml'
    rules:
      - your_rule_here
      - your_rule_here

stages:
  - build
  - test
  - deploy
  - upload

build_job:
  stage: build
  script:
    - gcc sourcecode.cpp

[1] https://docs.gitlab.com/ee/ci/yaml/includes.html


3
投票

我知道这是一个迟到的答案,但我在遇到这种情况时找到了解决方案。

使用工作流来控制管道行为。(GitLab 12.5 中引入) https://docs.gitlab.com/ee/ci/yaml/index.html#workflow

workflow:
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
© www.soinside.com 2019 - 2024. All rights reserved.