2016-07-08 11 views
6

Gitlabレジストリのイメージを別のCIビルドのベースイメージとして使用する場合、どのように認証すればよいですか?Gitlabレジストリのプライベートドッカー画像をCIのベースイメージとして使用

https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/configuration/advanced-configuration.md#using-a-private-docker-registryによると、まずランナーマシンに手動でログインする必要があります。どういうわけか、既存のGitlabユーザーとログインするのは変です。

Gitlabレジストリからベースイメージを取得するための認証にCI変数 "CI_BUILD_TOKEN"(「GitLabコンテナレジストリでの認証に使用されるトークン」と記載されています)を使用する方法はありますか?

編集:公開プロジェクトの画像を使用できることが分かりました。しかし私は本当に私のドッカープロジェクトを公開させたくありません。

アップデート:Gitlab 8.14以降、dockerレジストリ内のビルドからのドッカーイメージを使用することができます。 https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/configuration/advanced-configuration.md#support-for-gitlab-integrated-registry

答えて

3

いいえ、これは現時点ではどのような方法でも可能ではありません。 GitLabはベースイメージの明示的な資格証明を実装する必要がありますが、これは最も単純で正しい解決方法です。

GitLab Runnerマシンでdocker loginにする必要があります。有効期限が切れており、プロジェクトに依存するので、gitlab-ci-tokenを使用することはできません。したがって、プロジェクトごとに1つのトークンを実際に使用することはできません。あなた自身のログインを使用することは、現在利用可能な唯一の解決策です(これを喜んで訂正してください)。

+1

ありがとうございました。あなたが正しい。今は不可能です。私が見つけたポインタ:https://gitlab.com/gitlab-org/gitlab-ce/issues/19219とhttps://gitlab.com/gitlab-org/gitlab-ce/issues/19275 –

+0

これをフォローアップするには、 (https://gitlab.com/gitlab-org/gitlab-ce/issues/19275)この機能をより洗練された方法で公開することに関連するgitlabチケットがいくつかあります。しかし、これは今、バックログに収まっているようだ。うまくいけば、より多くのサポートがあれば、この機能は、チームがユーザーコミュニティのように重要であると特定するものになります。 – user376327

4

これは数ヶ月前のオプションを含む可能性があります。

ユーザーはgitlab-ci-token、パスワードは$CI_BUILD_TOKENをパスワードとして使用してください。

この例はGitLab 8.13.6で動作します。これは、必要に応じてテスト画像を構築し、次の段階で構文チェックを実行するためにそれを使用しています。

build_test: 
    stage: build_test_image 
    script: 
    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY 
    - docker build -t $CI_REGISTRY_IMAGE:test -f dockerfiles/test/Dockerfile . 
    - docker push $CI_REGISTRY_IMAGE:test 
    tags: 
    - docker_build 
    environment: test 

test_syntax: 
    image: $CI_REGISTRY_IMAGE:test 
    stage: test 
    script: 
    - flake8 --ignore=E501,E265,E402 . 

UPDATE:再読み込み質問を、受け入れ答えが正しいです。私の例では、ユーザーがランナーマシンから手動でログインしない限り、test_syntaxジョブはレジストリへの認証に失敗します。しかし、2人のランナーが同じホストにいる場合は動作しますが、とにかく最適な解決策ではありません。

gitlab-ci-multi-runner 1.8には、レジストリ資格情報を変数として追加するオプションがあります。したがって、コード化された資格情報を取得するためには1回ログインする必要があります。 documentationを参照してください。

+0

これを行うために使用しているランナーのタイプは何ですか?シェルランナーを使用している場合、GitLab CIはレジストリからイメージを引き出すのではなく、以前の段階でホスト上に作成したばかりのイメージを使用しています。 – BrokenBinary

+0

実際に私は2人のランナーを使用しています。 1つはシェルエグゼキュータ、もう1つはドッカーエグゼキュータです。シェルエグゼキュータの使用目的はDockerイメージを構築することだけです。そのため、私は 'docker_build'というタグを使用しています。 'test_syntax'というジョブの中の' image'指示文と 'build_test'にはそれがないことにも注意してください。 – charli

0

gitlabのコンテナレジストリにまずログインする必要があります。使用したい画像を下記の例を参照してください。イメージを使用する前に、基本的にあなたの認証を受けている before_script:に注目してください。

image: docker:latest 
services: 
- docker:dind 

stages: 
- build 

variables: 
    CONTAINER_RELEASE_IMAGE: registry.gitlab.com/obonyojimmy/node-mono-clr:latest 

before_script: 
    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com 

build-app: 
    stage: build 
    image: CONTAINER_RELEASE_IMAGE 
    script: 
    - npm run build 
関連する問題