我想知道,是否可以从if-else条件语句设置自定义Gitlab CI变量。
在我的.gitlab-ci.yml
文件中,我有以下内容:
variables:
PROJECT_VERSION: (if [ "${CI_COMMIT_TAG}" == "" ]; then "${CI_COMMIT_REF_NAME}-${CI_PIPELINE_ID}"; else ${CI_COMMIT_TAG}; fi);
Trying to set project version:
image: php:7.1-cli
stage: test
script:
# this echoes correct string (eg. "master-2794")
- (if [ "${CI_COMMIT_TAG}" == "" ]; then echo "${CI_COMMIT_REF_NAME}-${CI_PIPELINE_ID}"; else echo ${CI_COMMIT_TAG}; fi);
# this echoes something like "(if [ "" == "" ]; then "master-2794"; else ; fi);"
- echo $PROJECT_VERSION
可以这样做吗?如果是这样,我错过了什么?感谢
答案 0 :(得分:8)
这是预期的行为。
CI_COMMIT_TAG
仅设置为gitlab作业中的值。来自duplicated
CI_COMMIT_TAG - 提交标记名称。仅在构建标签时出现
因此varibales
部分CI_COMMIT_TAG
未定义,因此等于""。
因此,如果您想在定义标记的作业中使用CI_COMMIT_TAG
。见https://docs.gitlab.com/ee/ci/variables/README.html
答案 1 :(得分:3)
可能:
将您的逻辑添加到variable
部分:
variables:
VERSION_LOGIC: '(if [ "$${CI_COMMIT_TAG}" == "" ]; then echo "1.3.5.$$CI_PIPELINE_IID"; else echo "$${CI_COMMIT_TAG}"; fi);'
现在您可以在作业的脚本部分中使用此逻辑:
version:
stage: versioning
script:
- VERSION=$(eval $VERSION_LOGIC)
- echo "The current version is set to ${VERSION}."