如何有条件地执行Gitlab stages?

fumotvh3  于 2023-03-21  发布在  Git
关注(0)|答案(5)|浏览(163)

.gitlab-ci.yml中有3个阶段-构建、测试和部署。
每夜回归测试阶段需要在每夜运行。
下面是相关的.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

每天标记为只运行test阶段并不可取。
还有别的主意吗?

kx1ctssn

kx1ctssn1#

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
uqjltbpv

uqjltbpv2#

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

如果变量不存在,那么它后面的测试就不会运行,否则它们会运行。
希望能有所帮助!

ekqde3dh

ekqde3dh3#

如果现在有人在寻找这个功能,gitlab现在已经实现了一个带有变量覆盖的计划构建功能(非常方便)。文档找到here
对于任何对这个功能的说明感兴趣的人,当这个答案给出时,这里是:

使用管道计划

要计划管线,请执行以下操作:
1.导航到您项目的【管道】-【计划】,点击【新建计划】按钮。
1.填写表格
1.点击【保存流水线计划】,更改生效。
我最喜欢的特性是计划管道变量。
变量文档可以在here中找到,但对我来说最有用的信息是优先级,我将在这里重新输入:

变量优先级

这些变量可以被覆盖,并且它们按以下顺序优先于彼此:
1.触发器变量或计划管道变量(优先于所有变量)
1.项目级机密变量或受保护机密变量
1.组级机密变量或受保护机密变量

  1. YAML定义的作业级变量
  2. YAML定义的全局变量
    1.部署变量
    1.预定义变量(是链中的最低层)
    希望这能有所帮助。我很高兴他们添加了这个功能。
f3temu5u

f3temu5u4#

在项目左侧框中选择CI/CD -〉Schedules:

创建新计划:

添加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"

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

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

mmvthczy5#

我只是通过以下示例实现了这个“特性”:使用crontab和curl(我使用Linux,为什么不呢?)来触发运行夜间测试的触发器。

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

相关问题