100 lines
3.1 KiB
Markdown
100 lines
3.1 KiB
Markdown
\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 :
|
||
|
||
<div lang="en-US">
|
||
```bash
|
||
docker run --rm -d --name registry --network droneci -p 5000:5000 \
|
||
registry:2
|
||
```
|
||
</div>
|
||
|
||
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 :
|
||
|
||
<div lang="en-US">
|
||
```bash
|
||
42sh$ curl http://localhost:5000/v2/
|
||
{}
|
||
```
|
||
</div>
|
||
|
||
|
||
## 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 :\
|
||
<http://plugins.drone.io/drone-plugins/drone-docker/>.
|
||
|
||
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 :
|
||
|
||
<div lang="en-US">
|
||
```bash
|
||
docker run --rm -p 8080:8080 localhost:5000/youp0m
|
||
```
|
||
</div>
|
||
|
||
::::: {.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 !
|