tuto5-srs: Done
This commit is contained in:
parent
93a652e5aa
commit
44d777f00e
15 changed files with 212 additions and 142 deletions
|
|
@ -1,7 +1,4 @@
|
|||
\newpage
|
||||
|
||||
Publier une image Docker
|
||||
========================
|
||||
### 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
|
||||
|
|
@ -11,79 +8,97 @@ testés, les paquets sont envoyés sur le serveur d'où ils seront distribués
|
|||
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 ...
|
||||
un service qu'il faut déployer pour le mettre à jour. Afin de simplifier son
|
||||
déploiement en production, nous utiliserons une image Docker.
|
||||
|
||||
|
||||
## Mise en place du registre
|
||||
#### Fonctionnement du registre de Gitea \
|
||||
|
||||
::::: {.more}
|
||||
Si vous avez choisi Gitlab, vous pouvez utiliser directement le registre
|
||||
Docker intégré. Si vous utilisez Gitea, continuez cette section.
|
||||
:::::
|
||||
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 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 :
|
||||
Afin de pouvoir envoyer une image nous-même, nous devons nous connecter au
|
||||
registre :
|
||||
|
||||
<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
|
||||
docker login localhost:3000
|
||||
```
|
||||
</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
|
||||
|
||||
#### 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).
|
||||
|
||||
{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.
|
||||
|
||||
:::::
|
||||
|
||||
|
||||
## Suite du déploiement
|
||||
#### Test de l'image \
|
||||
|
||||
Nous en resterons là pour le déploiement, car nous n'avons
|
||||
pas d'environnement de production sur lequel déployer notre service.
|
||||
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
|
||||
|
|
@ -92,7 +107,7 @@ une machine virtuelle avec une connexion SSH. N'hésitez pas à l'ajouter à vot
|
|||
`.droneci.yml`.
|
||||
|
||||
|
||||
## Profitons !
|
||||
### 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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue