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。
对于给出此答案时对此功能的说明感兴趣的任何人,请看这里:
使用管道计划
为了安排管道:
- 导航到项目的 Pipelines -> Schedules 并单击 New Schedule 按钮。
- 填写表格
- 点击保存管道计划以使更改生效。
我最喜欢的功能是预定管道变量。
可以找到变量文档 here,但对我来说最有用的信息是优先级,我将在此处重新输入:
变量的优先级
变量可以被覆盖,它们按以下顺序相互优先:
- 触发变量或预定管道变量(优先于所有变量)
- 项目级秘密变量或受保护的秘密变量
- 组级秘密变量或受保护的秘密变量
- YAML 定义的作业级变量
- YAML 定义的全局变量
- 部署变量
- 预定义变量(链中最低)
希望这对您有所帮助。我很高兴他们添加了这个功能。
except
和 only
可以指定将触发它们的变量。
您可以在 .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
:
将 only
和 variables
部分添加到您的 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
有 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。
对于给出此答案时对此功能的说明感兴趣的任何人,请看这里:
使用管道计划
为了安排管道:
- 导航到项目的 Pipelines -> Schedules 并单击 New Schedule 按钮。
- 填写表格
- 点击保存管道计划以使更改生效。
我最喜欢的功能是预定管道变量。
可以找到变量文档 here,但对我来说最有用的信息是优先级,我将在此处重新输入:
变量的优先级
变量可以被覆盖,它们按以下顺序相互优先:
- 触发变量或预定管道变量(优先于所有变量)
- 项目级秘密变量或受保护的秘密变量
- 组级秘密变量或受保护的秘密变量
- YAML 定义的作业级变量
- YAML 定义的全局变量
- 部署变量
- 预定义变量(链中最低)
希望这对您有所帮助。我很高兴他们添加了这个功能。
except
和 only
可以指定将触发它们的变量。
您可以在 .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
:
将 only
和 variables
部分添加到您的 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