virli/tutorial/devops/publish-docker.md

115 lines
3.8 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

### 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 :
<div lang="en-US">
```
docker login localhost:3000
```
</div>
::::: {.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 :
<div lang="en-US">
```bash
docker build -t localhost:3000/${USER}/youp0m .
docker push localhost:3000/${USER}/youp0m
```
</div>
Rendez-vous ensuite sur la page <http://gitea:3000/${USER}/-/packages> 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 :\
<http://plugins.drone.io/drone-plugins/drone-docker/>.
::::: {.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 :
<div lang="en-US">
```bash
docker pull localhost:3000/${USER}/youp0m
docker run --rm -p 8080:8080 localhost:3000/${USER}/youp0m
```
</div>
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 !