2017-01-18 66 views
0

我們在團隊中使用Gitlab項目。每個開發人員在雲中都有自己的Kubernetes集羣,並在GitLab中擁有自己的分支。我們使用GitLab-CI自動構建新容器並將它們部署到我們的Kubernetes集羣。GitLab中的Concat變量名稱

目前,我們有一個.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變量。


事情,我們想過,這似乎不工作:

使用多個陽明文件,並將它們導入到對方=>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 shell。 –

+0

由於YAML文件是結構化的,因此處理和組合它們非常簡單。只需做一個自動化的步驟,完成後您的vcs完成。 – Anthon

回答

1

我們發現使用間接擴展(bash的功能)的解決方案:

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

但我們也認識到,我們的設置在某種程度上是愚蠢的:爲每個用戶分配多個分支並使用前綴變量沒有意義,因爲這會導致諸如上述和安全問題之類的問題,因爲所有用戶都可以訪問所有變量。

如果每個用戶都會分叉根項目並簡單地爲新功能創建合併請求,這樣會更容易。這樣就沒有必要重命名/變量或分支的前綴。