GitLab中的Concat变量名 [英] Concat variable names in GitLab
本文介绍了GitLab中的Concat变量名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我们在团队中使用GitLab项目。每个开发者在云中都有自己的Kubernetes集群,在GitLab中也有自己的分支。我们使用GitLab-CI自动构建新容器并将其部署到Kubernetes集群。
目前我们有一个.gitlab-ci.yml
类似于:
variables:
USERNAME: USERNAME
CI_K8S_PROJECT: ${USERNAME_CI_K8S_PROJECT}
REGISTRY_JSON_KEY_FILE: ${USERNAME_REGISTRY_JSON_KEY_FILE}
[...]
stages:
- build
- deploy
- remove
build-zeppelin:
stage: build
image: docker:latest
variables:
image_name: "zeppelin"
only:
- ${USERNAME}@Gitlab-Repo
tags:
- cloudrunner
script:
- docker login -u _json_key -p "${REGISTRY_JSON_KEY_FILE?}" https://eu.gcr.io
- image_name_fqdn="eu.gcr.io/${CI_K8S_PROJECT?}/${image_name?}:latest"
- docker build -t ${image_name_fqdn?} .
- docker push ${image_name_fqdn?}
- echo "Your new image is '${image_name_fqdn?}'. Have fun!"
[...]
因此,在开始时,我们使用用户名前缀引用重要信息。这工作得很好,但有问题,因为我们需要在每次来自其他用户的拉取请求后对其进行更正。
因此,我们寻找一种方法来保持每个开发人员的GitLab-ci文件相同,同时仍然引用每个开发人员不同的一些GitLab变量。
我们想过的似乎不起作用的事情:
使用多个YML文件并相互导入=>not supported。尝试将GitLab环境变量组合为前缀:
CI_K8S_PROJECT: ${${GITLAB_USER_ID}_CI_K8S_PROJECT}
或
INDIVIDUAL_CI_K8S_PROJECT: ${GITLAB_USER_ID}_CI_K8S_PROJECT
CI_K8S_PROJECT: ${INDIVIDUAL_CI_K8S_PROJECT}
推荐答案
我们找到了使用间接扩展(bash功能)的解决方案:
before_script:
- variableName=${GITLAB_USER_ID}_CI_K8S_PROJECT
- export wantedValue=${!variableName}
但我们也认识到,我们的设置有些愚蠢:为每个用户拥有多个分支并使用前缀变量是没有意义的,因为这会导致上述问题和安全问题,因为所有变量都是所有用户都可以访问的。
如果每个用户分叉根项目并简单地为新特性创建合并请求,则会容易得多。这样根本不需要对变量或分支进行重命名/添加前缀。
这篇关于GitLab中的Concat变量名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文