2016-07-08 32 views
6

Wie soll ich mich authentifizieren, wenn ich ein Bild aus der Gitlab-Registry als Basis-Image eines anderen CI-Builds verwenden möchte?Verwenden eines privaten Docker-Image aus der Gitlab-Registrierung als Basis-Image für CI

Nach https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/configuration/advanced-configuration.md#using-a-private-docker-registry muss ich mich erst manuell am Runner anmelden. Irgendwie fühlt es sich merkwürdig an, sich mit einem bestehenden Gitlab-Benutzer einzuloggen.

Gibt es eine Möglichkeit, die CI-Variable "CI_BUILD_TOKEN" (die als "Token für die Authentifizierung mit der GitLab-Container-Registrierung" beschrieben wird) zur Authentifizierung zu verwenden, um das Basisbild von Gitlab Registry zu ziehen?

EDIT: Ich habe herausgefunden, dass ich Bilder von öffentlichen Projekten verwenden kann. Aber ich möchte meine Docker-Projekte nicht wirklich öffentlich machen.

UPDATE: Ab Gitlab 8.14 können Sie einfach die Docker-Bilder aus der Docker-Registrierung verwenden. Siehe https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/configuration/advanced-configuration.md#support-for-gitlab-integrated-registry

Antwort

3

Nein, dies ist derzeit auf keine elegante Weise möglich. GitLab sollte explizite Anmeldeinformationen für die Basisbilder implementieren, es wird die einfachste und korrekteste Lösung sein.

Sie müssen docker login auf der GitLab Runner-Maschine. Sie können die gitlab-ci-token nicht verwenden, da sie ablaufen und auch projektabhängig sind, so dass Sie eigentlich kein Token für jedes Projekt verwenden können. Das Verwenden Ihres eigenen Logins ist so ziemlich die einzige Lösung, die momentan zur Verfügung steht (gerne auf dieser Seite korrigiert).

+1

Danke. Du hast recht. Es ist momentan nicht möglich. Pointer, die ich gefunden habe: https://gitlab.com/gitlab-org/gitlab-ce/issues/19219 und https://gitlab.com/gitlab-org/gitlab-ce/issues/19275 –

+0

Um dies zu verfolgen, Es gibt ein paar gitlab-Tickets, die diese Funktionalität auf eine elegantere Weise offenlegen (https://gitlab.com/gitlab-org/gitlab-ce/issues/19275). Dies scheint jedoch im Rückstand zu sein. Hoffentlich wird diese Fähigkeit, mit mehr Unterstützung, etwas sein, das das Team als genauso wichtig erachtet, wie es die Benutzergemeinschaft scheint. – user376327

4

Jetzt ist es möglich, sie haben diese Option vor Monaten enthalten.

Verwenden Sie gitlab-ci-token als Benutzer und die Variable $CI_BUILD_TOKEN als Kennwort.

Dieses Beispiel funktioniert mit GitLab 8.13.6. Es baut das Bild Test, wenn nötig, und in der nächsten Stufe verwendet es Syntaxprüfungen durchführen:

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: Re-Lektüre die Frage, die akzeptierte Antwort ist richtig. In meinem Beispiel kann der Job test_syntax nicht bei der Registrierung authentifiziert werden, es sei denn, der Benutzer meldet sich manuell von der Runner-Maschine an. Obwohl es funktionieren kann, wenn die 2 Runner auf demselben Host sind, ist es sowieso nicht die beste Lösung.

In gitlab-ci-multi-runner 1.8 gibt es eine Option zum Hinzufügen der Registrierungsanmeldeinformationen als eine Variable, so dass Sie nur einmal anmelden müssen, um die verschlüsselten Anmeldeinformationen zu erhalten. Siehe documentation.

+0

Welche Art von Läufer verwenden Sie, um dies zu tun?Wenn Sie einen Shell-Runner verwenden, zieht GitLab CI das Image nicht aus der Registrierung, sondern verwendet stattdessen das Image, das Sie gerade auf dem Host in der vorherigen Phase erstellt haben. – BrokenBinary

+0

Eigentlich benutze ich 2 Läufer. Einer mit Shell-Executor, ein anderer mit Docker-Executor. Die beabsichtigte Verwendung des Shell-Executors ist nur, um Docker-Images zu erstellen, deshalb verwende ich das Tag 'docker_build'. Beachten Sie auch die 'image'-Direktive im Job' test_syntax' und deren Fehlen in 'build_test'. – charli

0

Es ist möglich, dass Sie zuerst in gitlab Container Registrierung des Bildes, das Sie verwenden möchten, anmelden, siehe unten Beispiel. Beachten Sie die before_script:, die Sie vor der Verwendung des Bildes im Grunde autorisiert.

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