gitlab cicd variables表达式配置问题

背景介绍

今天在编写 gitlab-ci.yml 文件的时候发现配置的 variables 错误的问题,仔细研究后发现在一定 variables 时在特定情况下不支持表达式。

问题追踪

错误的写法:

1
2
3
4
5
6
variables:
CI_K8S_REGISTRY_IMAGE: registry.xxx.com/$CI_PROJECT_PATH
// ...
build_sit_job:
variables:
CUST_APP_K8S_IMAGE_NAME: $CI_K8S_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME

我们在全局声明 CI_K8S_REGISTRY_IMAGE 参数,其中携带了系统预设的参数$CI_PROJECT_PATH。

随后在 jobs 的局部变量中进行使用,并拼接上新的参数。

但在执行过程中却发现 $CI_PROJECT_PATH 最终并没有生效。

发现 CUST_APP_K8S_IMAGE_NAME 中使用到的 CI_K8S_REGISTRY_IMAGE 并不是“计算”后的,而是上面定义的表达式。

但单独查找 CI_K8S_REGISTRY_IMAGE 的变量又是正常的:

原因猜想

当我们在局部 variables 中使用全局 variables 时,ci 并不会将计算后的全局 variables 引入,而是将上面定义的表达式当做“值”进行引入,这可能是 ci 机制的一个 bug,也可能是故意为之,这点不是很清楚。

解决方式也很简单,我们将全局 variables 中引入的预设 variables 放到局部 variables 中就可以了。

正确写法

1
2
3
4
5
6
variables:
CI_K8S_REGISTRY_IMAGE: registry.xxx.com
// ...
build_sit_job:
variables:
CUST_APP_K8S_IMAGE_NAME: $CI_K8S_REGISTRY_IMAGE/$CI_PROJECT_PATH:$CI_COMMIT_REF_NAME

gitlab cicd variables表达式配置问题
https://www.wobushi.top/2021/gitlab-cicd-variables表达式配置问题/
作者
Pride Su
发布于
2021年4月6日
许可协议