### 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. Afin de simplifier son déploiement en production, nous utiliserons une image Docker. #### Fonctionnement du registre de Gitea \ Gitea intègre un registre d'images Docker (depuis la version 1.17, mi-2022). Pour le moment, les images sont uniquement liées à un compte utilisateur ou à une organisation, pas directement à un dépôt. Une page permet de rattacher l'image envoyée à un dépôt, ce que l'on fera dans un deuxième temps. Afin de pouvoir envoyer une image nous-même, nous devons nous connecter au registre :
``` docker login localhost:3000 ```
::::: {.question} #### N'a-t-on pas besoin d'un certificat TLS pour utiliser un registre Docker ? {-} \ Ceci est possible exclusivement parce que le registre `localhost` est considéré non-sûr par défaut. C'est-à-dire qu'il n'a pas besoin de certificat TLS valide 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/). ::::: Nous pouvons ensuite envoyer une image pour s'assurer que tout va bien :
```bash docker build -t localhost:3000/${USER}/youp0m . docker push localhost:3000/${USER}/youp0m ```
Rendez-vous ensuite sur la page pour attribuer l'image au dépôt `youp0m` (voir pour cela dans les paramètres de l'image). ![Notre image `youp0m` dans Gitea !](gitea-packages.png){height=6cm} #### Publication de l'image \ Une fois le registre testé, il ne nous reste plus qu'à ajouter une étape de publication de l'image Docker. Cela se fait au moyen du plugin suivant :\ . ::::: {.exercice} Continuons d'éditer le fichier `.drone.yml` du dépôt pour faire générer à Drone l'image Docker, et la publier. Attention dans Drone, le domaine à utiliser pour contacter Gitea (et donc le registre), n'est pas `localhost`, mais `gitea`. Comme notre registre n'a pas de certificat TLS pour utiliser `https`, il est nécessaire de définir l'option `insecure` à `true`. Utilisez les *secrets* de Drone pour stocker le nom d'utilisateur et le mot de passe d'accès au registre. ::::: #### Test de l'image \ Sur notre hôte, nous pouvons tester que l'image a bien été publiée grâce à la commande suivante :
```bash docker pull localhost:3000/${USER}/youp0m docker run --rm -p 8080:8080 localhost:3000/${USER}/youp0m ```
Si une nouvelle image est bien récupérée du dépôt, bravo, vous avez réussi ! ### Vers le déploiement Nous n'allons pas faire le déploiement aujourd'hui, 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 !