Gitlabレジストリのイメージを別のCIビルドのベースイメージとして使用する場合、どのように認証する必要がありますか?
https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/configuration/advanced-configuration.md#using-a-privateによると-docker-registry 最初にランナーマシンに手動でログインする必要があります。どういうわけか、既存のGitlabユーザーでログインするのは奇妙に感じます。
認証にCI変数「CI_BUILD_TOKEN」(「GitLabコンテナレジストリでの認証に使用されるトークン」として説明されています)を使用して、Gitlabレジストリからベースイメージをプルする方法はありますか?
編集:私は公共プロジェクトからの画像を使用できることを知りました。しかし、Dockerプロジェクトを公開したくはありません。
更新:Gitlab 8.14以降、ビルドインドッカーレジストリのドッカーイメージを使用できます。 https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/configuration/advanced-configuration.md#support-for-gitlab-を参照してください統合レジストリ
いいえ、これは現在、エレガントな方法では不可能です。 GitLabは、ベースイメージの明示的な認証情報を実装する必要があります。これは、最も簡単で正しいソリューションになります。
GitLabRunnerマシンでdocker login
する必要があります。 gitlab-ci-token
は有効期限が切れており、プロジェクトに依存しているため、使用できません。したがって、プロジェクトごとに1つのトークンを実際に使用することはできません。独自のログインを使用することは、現在利用可能なほとんど唯一の解決策です(これで修正されてうれしいです)。
今では可能です、彼らは数ヶ月前にそのオプションを含めました。
使用する gitlab-ci-token
asユーザーおよび変数$CI_BUILD_TOKEN
パスワードとして。
この例はGitLab8.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 .
更新:質問を読み直すと、受け入れられた答えは正しいです。私の例では、ジョブtest_syntax
は、ユーザーがランナーマシンから手動でログインしない限り、レジストリへの認証に失敗します。ただし、2人のランナーが同じホスト上にいる場合は機能しますが、とにかく最善の解決策ではありません。
gitlab-ci-multi-runner 1.8 には、レジストリ資格情報を変数として追加するオプションがあるため、エンコードされた資格情報を取得するには、一度ログインするだけで済みます。 ドキュメント を参照してください。
これは2018年9月の時点で絶対に可能です。ここに私の素朴な実装を投稿します。
docker:dind
サービスを利用する必要があります。これにより、Dockerコンテナー内でdocker
コマンドを実行できます。docker login
を使用する必要があります。これは、GitLabの組み込み変数(gitlab-ci-token
、$CI-JOB-TOKEN
)を使用して実行できます。$REGISTRY
値:registry.gitlab.com/$USER/$REPO:$TAG
)に対して認証できるようになります。これにより、CI/CDコンテキスト内および任意の場所からDockerコンテナをプッシュまたはプルできます。認証されたDockerサーバー。このブロックをトップレベルで作成して、次のジョブの前に実行されるようにします。
before_script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $REGISTRY
イメージをビルドしてレジストリに保存するジョブ:
build_container:
image: docker:latest
stage: build
services:
- docker:dind
script:
- docker build -t $REGISTRY .
- docker Push $REGISTRY
カスタム画像を使用するジョブ:
build_app:
image: $REGISTRY
stage: deploy
script:
- npm run build
これを実現するには、「ボット」GitLabユーザーを作成し、必要に応じてリポジトリ/グループへのアクセスを割り当てます。次に、gitlab-ci-token
と$CI_JOB_TOKEN
を適切な環境変数に置き換えるだけです。これは、ベースイメージがプライベートである場合にのみ必要です。
最初に、使用するイメージの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