GitLab中的Concat变量名 [英] Concat variable names in GitLab

查看:16
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆