Gitlab有条件地执行阶段

Gitlab execute stage conditionally

有 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

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

还有其他想法吗?

我只是按照找到的示例 here 实现了这个 "feature" 使用 crontab 和 curl(我使用 Linux,因为为什么不呢?)触发 运行 你的夜间测试。

30 0 * * * curl --request POST --form token=TOKEN --form ref=master https://gitlab.example.com/api/v3/projects/9/trigger/builds

目前没有办法根据环境变量 运行 作业(您可以随时打开功能请求!)。不过,如果环境变量不存在,您可以使用简单的 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

如果变量不存在,它后面的测试将不会 运行。否则,他们会的。

希望对您有所帮助!

万一现在有人在找这个,gitlab 现在已经实现了一个带有变量覆盖的预定构建功能(非常方便)。找到文档 here

对于给出此答案时对此功能的说明感兴趣的任何人,请看这里:

使用管道计划

为了安排管道:

  1. 导航到项目的 Pipelines -> Schedules 并单击 New Schedule 按钮。
  2. 填写表格
  3. 点击保存管道计划以使更改生效。

我最喜欢的功能是预定管道变量。

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

变量的优先级

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

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

希望这对您有所帮助。我很高兴他们添加了这个功能。

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 

Select CI/CD -> 项目左侧框架中的时间表:

创建新计划:

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

onlyvariables 部分添加到您的 gitlab-ci.yml 文件:

    nightly_regression_test_project:
      stage: test
      script:
        - cd ./some-dir
        - execute test-script
      only:
        variables:
          - $NIGHTLY_TEST == "True"

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

    nightly_regression_test_project:
      stage: test
      script:
        - cd ./some-dir
        - execute test-script
      rules:
        - if: $NIGHTLY_TEST == "True"
          when: always