2017-01-18 4 views
0

チーム内でGitlabプロジェクトを使用しています。各開発者は、クラウド内に独自のKubernetesクラスタを持ち、GitLab内に独自のブランチを持っています。私たちはGitLab-CIを使って新しいコンテナを自動的に構築し、それらをKubernetesクラスタに展開します。GitLabのconcat変数名

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.ymlを持っている瞬間

は次のようになります。これは非常にうまくいきますが、問題があるのは、別のユーザーからのプル要求があるたびに修正する必要があるためです。

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

我々は間接的な拡張(bashの機能)を使用して解決策を見つけた:

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

しかし、私たちはまた、私たちのセットアップが何とかばかげていることを認識しました:すべての変数がすべてのユーザーにアクセス可能であるため、上記のような問題やセキュリティ上の問題が発生するため、各ユーザーに複数のブランチを持ち、接頭辞付きの変数を使用することは意味がありません。

各ユーザーがルートプロジェクトをフォークし、単に新しい機能のマージ要求を作成する方が簡単です。このようにして、必要な変数やブランチの名前変更/接頭辞はまったく必要ありません。

関連する問題