virli/tutorial/devops/publish-docker.md

115 lines
3.8 KiB
Markdown
Raw Normal View History

2022-11-13 11:40:18 +00:00
### Publier une image Docker
2020-10-28 22:16:34 +00:00
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
2022-02-24 19:43:43 +00:00
testés, les paquets sont envoyés sur le serveur d'où ils seront distribués ; il
2020-10-28 22:16:34 +00:00
n'y a pas de service/docker à relancer).
2022-02-24 19:43:43 +00:00
À l'inverse, `youp0m` est à la fois un programme que l'on peut télécharger et
2022-11-13 11:40:18 +00:00
un service qu'il faut déployer pour le mettre à jour. Afin de simplifier son
déploiement en production, nous utiliserons une image Docker.
2020-10-28 22:16:34 +00:00
2022-11-13 11:40:18 +00:00
#### Fonctionnement du registre de Gitea \
2020-10-28 22:16:34 +00:00
2022-11-13 11:40:18 +00:00
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.
2020-10-28 22:16:34 +00:00
2022-11-13 11:40:18 +00:00
Afin de pouvoir envoyer une image nous-même, nous devons nous connecter au
registre :
2020-10-28 22:16:34 +00:00
<div lang="en-US">
2022-11-13 11:40:18 +00:00
```
docker login localhost:3000
2020-10-28 22:16:34 +00:00
```
</div>
2022-11-13 11:40:18 +00:00
::::: {.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/).
:::::
2020-10-28 22:16:34 +00:00
2022-11-13 11:40:18 +00:00
Nous pouvons ensuite envoyer une image pour s'assurer que tout va bien :
2020-10-28 22:16:34 +00:00
<div lang="en-US">
```bash
2022-11-13 11:40:18 +00:00
docker build -t localhost:3000/${USER}/youp0m .
docker push localhost:3000/${USER}/youp0m
2020-10-28 22:16:34 +00:00
```
</div>
2022-11-13 11:40:18 +00:00
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}
2020-10-28 22:16:34 +00:00
2022-11-13 11:40:18 +00:00
#### Publication de l'image \
2020-10-28 22:16:34 +00:00
2022-11-13 11:40:18 +00:00
Une fois le registre testé, il ne nous reste plus qu'à ajouter une étape de
2022-02-24 19:43:43 +00:00
publication de l'image Docker. Cela se fait au moyen du plugin suivant :\
2020-10-28 22:16:34 +00:00
<http://plugins.drone.io/drone-plugins/drone-docker/>.
2022-11-13 11:40:18 +00:00
::::: {.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.
:::::
2020-10-28 22:16:34 +00:00
2022-11-13 11:40:18 +00:00
#### Test de l'image \
2020-10-28 22:16:34 +00:00
2022-11-13 11:40:18 +00:00
Sur notre hôte, nous pouvons tester que l'image a bien été publiée grâce à la
2022-02-24 19:43:43 +00:00
commande suivante :
2020-10-28 22:16:34 +00:00
<div lang="en-US">
```bash
2022-11-13 11:40:18 +00:00
docker pull localhost:3000/${USER}/youp0m
docker run --rm -p 8080:8080 localhost:3000/${USER}/youp0m
2020-10-28 22:16:34 +00:00
```
</div>
2022-11-13 11:40:18 +00:00
Si une nouvelle image est bien récupérée du dépôt, bravo, vous avez réussi !
2020-10-28 22:16:34 +00:00
2022-11-13 11:40:18 +00:00
### Vers le déploiement
2020-10-28 22:16:34 +00:00
2022-11-13 11:40:18 +00:00
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.
2020-10-28 22:16:34 +00:00
2021-11-19 23:00:30 +00:00
Vous pouvez néanmoins tester les plugins
2020-10-28 22:16:34 +00:00
[`scp`](http://plugins.drone.io/appleboy/drone-scp/) ou
2021-11-19 23:00:30 +00:00
[`ansible`](http://plugins.drone.io/drone-plugins/drone-ansible/) si vous avez
2020-10-28 22:16:34 +00:00
une machine virtuelle avec une connexion SSH. N'hésitez pas à l'ajouter à votre
`.droneci.yml`.
2022-11-13 11:40:18 +00:00
### Profitons !
2020-10-28 22:16:34 +00:00
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
2022-02-24 19:43:43 +00:00
action !