Gitlab有条件地执行阶段

dee*_*ive 22 git gitlab gitlab-ci

有3个阶段 - 构建,测试和部署.gitlab-ci.yml.

需要运行夜间回归测试阶段 - 好nightly:)

这是相关的.gitlab-ci.yml代码:

stages:
  - build
  - test
  - deploy

build_project:
  stage: build
  script:
    - cd ./some-dir
    - build-script.sh
  except:
  - tags

#Run this only when say variable 'NIGHTLY_TEST == True'. But HOW?
nightly_regression_test_project:
  stage: test
  script:
    - cd ./some-dir
    - execute test-script
Run Code Online (Sandbox Code Playgroud)

每天标记到only运行test阶段是不可取的.

还有其他想法吗?

And*_*ann 23

exceptonly可以指定将触发它们的变量.

您可以在.gitlab-ci.yml中使用以下内容:

build1:
  stage: build
  script:
    - echo "Only when NIGHTLY_TEST is false"
  except:
    variables:
      - $NIGHTLY_TEST 

test1:
  stage: test
  script: 
    - echo "Only when NIGHTLY_TEST is true"
  only:
    variables:
      - $NIGHTLY_TEST 
Run Code Online (Sandbox Code Playgroud)

  • 注意:您不能只保留变量未设置。它必须具有值“true”(全部小写) (2认同)
  • 定义 NIGHTLY_TEST 变量的可能方法有哪些? (2认同)

Con*_*hea 14

目前没有办法根据环境变量运行作业(您始终可以打开功能请求!).但是,如果环境变量不存在,您可以使用简单的Bash命令立即退出.

就像是:

stages:
  - build
  - test
  - deploy

build_project:
  stage: build
  script:
    - cd ./some-dir
    - build-script.sh
  except:
  - tags

# Run this only when NIGHTLY_TEST environment variable exists.
nightly_regression_test_project:
  stage: test
  script:
    - [ -z "$NIGHTLY_TEST" ] && exit 1;
    - cd ./some-dir
    - execute test-script
Run Code Online (Sandbox Code Playgroud)

如果变量不存在,则跟随它的测试将不会运行.否则,他们会.

希望有所帮助!

  • 如果您不希望 `nightly_regression_test_project` 作业无法使整个管道失败,您可以使用 `exit 0` 而不是 `exit 1`:作业将终止,但管道将继续 (3认同)

tru*_*ype 8

如果有人现在正在寻找这个,gitlab现在已经实现了具有可变覆盖功能的计划构建功能(非常方便)。在此处找到文档。

对于在给出此答案后对此功能的说明感兴趣的任何人,请按以下步骤进行:

使用管道时间表

为了调度管道:

  1. 导航到项目的管道->时间表,然后单击“ 新建时间表”按钮。
  2. 填写表格
  3. 点击保存管道计划以使更改生效。

我最喜欢的功能是计划的管道变量。

变量文档可以在这里找到,但是对我来说最有用的信息是优先级,我将在这里重新输入:

变量优先级

变量可以被覆盖,并且它们按此顺序相互优先:

  1. 触发变量或计划的管道变量(优先于所有变量)
  2. 项目级秘密变量或受保护的秘密变量
  3. 组级秘密变量或受保护的秘密变量
  4. YAML定义的作业级变量
  5. YAML定义的全局变量
  6. 部署变量
  7. 预定义变量(在链中是最低的)

希望这可以帮助。我很高兴他们添加了此功能。

  • 该文档没有帮助。它展示了如何设置变量,并展示了如何在计划中使用“only”和“ except”,但没有展示如何将“only”和“ except”与变量一起使用。应该使用什么语法? (2认同)

fra*_*an1 7

在项目的左侧框架中选择 CI/CD -> Schedules:

在此输入图像描述

创建一个新的时间表:

在此输入图像描述

添加您的NIGHTLY_TEST变量并将其设置为True

在此输入图像描述

only将和部分添加variables到您的gitlab-ci.yml文件中:

    nightly_regression_test_project:
      stage: test
      script:
        - cd ./some-dir
        - execute test-script
      only:
        variables:
          - $NIGHTLY_TEST == "True"
Run Code Online (Sandbox Code Playgroud)

-- 更新 -- 使用基于新规则的逻辑,您可以这样做:

    nightly_regression_test_project:
      stage: test
      script:
        - cd ./some-dir
        - execute test-script
      rules:
        - if: $NIGHTLY_TEST == "True"
          when: always
Run Code Online (Sandbox Code Playgroud)