Gitlab有条件地执行阶段

时间:2016-10-11 23:52:12

标签: git gitlab gitlab-ci

有三个阶段 - .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阶段不是首选。

还有其他想法吗?

5 个答案:

答案 0 :(得分:15)

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 

答案 1 :(得分:12)

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

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

希望有所帮助!

答案 2 :(得分:5)

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

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

使用管道排程

为了安排管道:

  1. 导航到您项目的管道 - >时间表,然后点击新计划按钮。
  2. 填写表格
  3. 点击保存管道计划,使更改生效。
  4. 我最喜欢的功能是预定的管道变量。

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

    变量优先级

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

    1. 触发变量或预定管道变量(优先于所有变量)
    2. 项目级秘密变量或受保护的秘密变量
    3. 组级秘密变量或受保护的秘密变量
    4. YAML定义的作业级变量
    5. YAML定义的全局变量
    6. 部署变量
    7. 预定义变量(链中最低的)
    8. 希望这会有所帮助。我很高兴他们添加了这个功能。

答案 3 :(得分:0)

在项目的左框架中选择CI / CD->时间表:

enter image description here

创建新时间表:

enter image description here

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

enter image description here

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

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

答案 4 :(得分:-2)

我刚刚按照找到的here示例实现了这个“功能” 使用crontab和curl(我使用Linux,因为为什么不呢?)来设置触发器来运行你的夜间测试。

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