2017-01-18 2 views
0

Мы используем проект Gitlab в команде. У каждого разработчика есть свой кластер Kubernetes в облаке и собственный филиал в GitLab. Мы используем GitLab-CI для автоматического создания новых контейнеров и их развертывания в наших кластерах Kubernetes.Названия переменных Concat в GitLab

В настоящее время у нас есть .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} 
+0

Это изображение не использует оболочку bash. –

+0

Поскольку файлы YAML структурированы, их очень просто обрабатывать и комбинировать. Просто сделайте это автоматическим шагом, который выполняется вашим vcs после проверки. – Anthon

ответ

1

Мы нашли решение с использованием косвенного расширения (функция Баш):

before_script: 
- variableName=${GITLAB_USER_ID}_CI_K8S_PROJECT 
- export wantedValue=${!variableName} 

Но мы также признали, что наша установка была как-то глупо : Не имеет смысла иметь несколько ветвей для каждого пользователя и использовать префиксные переменные, так как это приводит к таким проблемам, как вышеупомянутые и проблемы с безопасностью, поскольку все переменные доступны для всех пользователей.

Это проще, если каждый пользователь разворачивает корневой проект и просто создает запрос на объединение для новых функций. Таким образом, переименование/префикс переменных или ветвей вообще не требуется.

Смежные вопросы