\newpage Publier une image Docker ======================== Toutes les tâches de publication peuvent s'assimiler à des tâches de déploiement continu. C'est en particulier le cas lorsque le produit de compilation sera simplement publié et qu'il n'y a pas de service à mettre à jour ensuite (par exemple, dans le cas de Firefox ou de LibreOffice, une fois testés, les paquets sont envoyés sur le serveur d'où ils seront distribués ; il n'y a pas de service/docker à relancer). À l'inverse, `youp0m` est à la fois un programme que l'on peut télécharger et un service qu'il faut déployer pour le mettre à jour. Pour simplifier le déploiement, nous utilisons une image Docker. Il faut cependant la générer ... ## Mise en place du registre ::::: {.more} Si vous avez choisi Gitlab, vous pouvez utiliser directement le registre Docker intégré. Si vous utilisez Gitea, continuez cette section. ::::: Afin de disposer de notre propre registre Docker sur lequel publier nos images, nous allons utiliser l'image de registre fournie par Docker. Elle se lance comme suit :
```bash docker run --rm -d --name registry --network droneci -p 5000:5000 \ registry:2 ```
Vous trouverez davantage d'informations pour le déploiement [ici](https://docs.docker.com/registry/deploying/). Nous pouvons tester le bon fonctionnement de notre registre avec la commande suivante :
```bash 42sh$ curl http://localhost:5000/v2/ {} ```
## Publication de l'image Une fois le registre démarré, il ne nous reste plus qu'à ajouter une étape de publication de l'image Docker. Cela se fait au moyen du plugin suivant :\ . Sans plus de configuration, le registre que nous avons démarré n'attend pas d'authentification. Et comme il n'a pas de certificat TLS pour utiliser `https`, il est nécessaire de définir l'option `insecure` à `true`. ## Test de l'image Sur l'hôte, nous pouvons tester que l'image a bien été publiée grâce à la commande suivante :
```bash docker run --rm -p 8080:8080 localhost:5000/youp0m ```
::::: {.question} On notera que ceci est possible exclusivement parce que le registre `localhost:5000` est considéré non-sûr par défaut. C'est-à-dire qu'il n'a pas besoin de certificat TLS sur sa connexion HTTP pour être utilisé.\ Si on avait dû utiliser un autre nom de domaine, il aurait fallu [l'ajouter à la liste des `insecure-registries`](https://docs.docker.com/registry/insecure/). ::::: ## Suite du déploiement Nous en resterons là pour le déploiement, car nous n'avons pas d'environnement de production sur lequel déployer notre service. Vous pouvez néanmoins tester les plugins [`scp`](http://plugins.drone.io/appleboy/drone-scp/) ou [`ansible`](http://plugins.drone.io/drone-plugins/drone-ansible/) si vous avez une machine virtuelle avec une connexion SSH. N'hésitez pas à l'ajouter à votre `.droneci.yml`. ## Profitons ! Sonarqube a repéré quelques erreurs dans le code de `youp0m`, essayez de les corriger, et publiez une nouvelle version, pour observer toute la chaîne en action !