Wel*_*oud 12 variables continuous-integration if-statement gitlab gitlab-ci
我想知道,如果可以从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
Run Code Online (Sandbox Code Playgroud)
可以这样做吗?如果是这样,我错过了什么?谢谢
这是预期的行为.
CI_COMMIT_TAG
仅在gitlab作业中设置为值.来自https://docs.gitlab.com/ee/ci/variables/README.html
CI_COMMIT_TAG - 提交标记名称.仅在构建标签时出现
因此,在该varibales
部分CI_COMMIT_TAG
中没有定义,因此等于"".
因此,如果您想CI_COMMIT_TAG
在定义标记的作业中使用.请参阅https://docs.gitlab.com/ee/ci/yaml/README.html#tags
有可能的:
将您的逻辑添加到该variable
部分:
variables:
VERSION_LOGIC: '(if [ "$${CI_COMMIT_TAG}" == "" ]; then echo "1.3.5.$$CI_PIPELINE_IID"; else echo "$${CI_COMMIT_TAG}"; fi);'
Run Code Online (Sandbox Code Playgroud)
现在您可以在作业的脚本部分使用此逻辑:
version:
stage: versioning
script:
- VERSION=$(eval $VERSION_LOGIC)
- echo "The current version is set to ${VERSION}."
Run Code Online (Sandbox Code Playgroud)