web-dev-qa-db-fra.com

Comment publier des images Docker sur Docker Hub depuis Gitlab-CI

Gitlab fournit un .gitlab-ci.yml modèle pour créer et publier des images dans son propre registre (cliquez sur "nouveau fichier" dans l'un de vos projets, sélectionnez .gitlab-ci.yml et docker). Le fichier ressemble à ceci et il fonctionne hors de la boîte :)

# This file is a template, and might need editing before it works on your project.
# Official docker image.
image: docker:latest

services:
  - docker:dind

before_script:
  - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY

build-master:
  stage: build
  script:
    - docker build --pull -t "$CI_REGISTRY_IMAGE" .
    - docker Push "$CI_REGISTRY_IMAGE"
  only:
    - master

build:
  stage: build
  script:
    - docker build --pull -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" .
    - docker Push "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG"
  except:
    - master

Mais par défaut, cela sera publié dans le registre de gitlab. Comment pouvons-nous publier sur hub docker à la place?

19
GabLeRoux

Pas besoin de changer cela .gitlab-ci.yml du tout, nous avons seulement besoin d'ajouter/remplacer les variables d'environnement dans les paramètres du pipeline du projet.

Tout d'abord, nous devons connaître l'URL du registre. En utilisant hub.docker.com ne fonctionnera pas, vous obtiendrez l'erreur suivante:

Réponse d'erreur du démon: tentative de connexion à https://hub.docker.com/v2/ a échoué avec le statut: 404 Introuvable

L'URL de registre du hub Docker par défaut peut être trouvée comme ceci:

docker info | grep Registry
Registry: https://index.docker.io/v1/

index.docker.io est ce que je cherchais. Je voulais publier image gableroux/unity3d , voici ce que j'ai utilisé dans les secrets du pipeline:

CI_REGISTRY_USER=gableroux
CI_REGISTRY_PASSWORD=********
CI_REGISTRY=docker.io
CI_REGISTRY_IMAGE=index.docker.io/gableroux/unity3d

CI_REGISTRY_IMAGE est important à définir.
Il s'agit par défaut de registry.gitlab.com/<username>/<project>
l'URL de regsitry doit être mise à jour, utilisez donc index.docker.io/<username>/<project>
Le docker hub étant le registre par défaut, vous pouvez également utiliser <username>/<project> à la place, mais je préfère quand c'est verbeux. Cette réponse devrait donc également couvrir d'autres registres, il suffit de mettre à jour les variables d'environnement en conséquence.

37
GabLeRoux

Pour développer la réponse de GabLeRoux,

J'ai eu des problèmes lors de la phase de poussée de la génération GitLab CI:

denied: requested access to the resource is denied

En changeant mon CI_REGISTRY à docker.io (retirer le index.) J'ai réussi à pousser.

11
murtis