【发布时间】:2017-06-03 01:07:04
【问题描述】:
我们在团队中使用 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!"
[...]
所以一开始我们使用 USERNAME 前缀来引用重要信息。这工作得很好,但有问题,因为我们需要在另一个用户的每次拉取请求后更正它们。
因此,我们寻找一种方法,让每个开发人员的 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 shell。
-
由于 YAML 文件是结构化的,因此处理和组合它们非常简单。只需在结帐后由您的 vcs 自动执行该步骤即可。