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?
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.
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.