virli/tutorial/devops/ci.md

111 lines
4.2 KiB
Markdown
Raw Normal View History

2020-10-28 22:16:34 +00:00
\newpage
2021-11-19 23:00:30 +00:00
## Intégration continue
2020-10-28 22:16:34 +00:00
2021-11-19 23:00:30 +00:00
Une fois Gitea et Drone installés et configurés, nous allons pouvoir rentrer
2022-02-24 19:43:43 +00:00
dans le vif du sujet : faire de l'intégration continue sur notre premier projet !
2020-10-28 22:16:34 +00:00
### Créez un dépôt pour `youp0m`
2022-02-24 19:43:43 +00:00
Reprenez les travaux déjà réalisés : nous allons notamment avoir besoin du
`Dockerfile` que nous avons réalisé pour ce projet `youp0m`.
2020-10-28 22:16:34 +00:00
2022-02-24 19:43:43 +00:00
Après avoir créé (ou migré pour les plus malins !) le dépôt
`youp0m`[^urlyoup0m] dans gitea, synchronisez les dépôts dans Drone, puis
activez la surveillance de `youp0m`.
2020-10-28 22:16:34 +00:00
2022-02-24 19:43:43 +00:00
[^urlyoup0m]: <https://git.nemunai.re/nemunaire/youp0m>
Nous allons devoir rédiger un fichier `drone.yml`, que l'on placera à la racine
2021-11-19 23:00:30 +00:00
du dépôt. C'est ce fichier qui sera traité par DroneCI pour savoir comment
2020-10-28 22:16:34 +00:00
compiler et tester le projet.
2021-11-19 23:00:30 +00:00
::::: {.warning}
2022-02-24 19:43:43 +00:00
Un fichier `drone.yml` existe déjà à la racine du dépôt. Celui-ci pourra vous
servir d'inspiration, mais il ne fonctionnera pas directement dans votre
2021-11-19 23:00:30 +00:00
installation.
**Vous rencontrerez des problèmes inattendus si vous utilisez le fichier
`.drone.yml` du dépôt.** Vous **DEVEZ** partir d'un fichier vide et suivre la
documentation pour obtenir un `.drone.yml` fonctionnel.
:::::
2020-10-28 22:16:34 +00:00
### Définir les étapes d'intégration
2021-11-19 23:00:30 +00:00
Toutes les informations nécessaires à l'écriture du fichier `.drone.yml` se
2022-02-24 19:43:43 +00:00
trouvent dans l'excellente documentation du projet :\
<https://docs.drone.io/pipeline/docker/examples/languages/golang/>.
2020-10-28 22:16:34 +00:00
2021-11-19 23:00:30 +00:00
Les étapes sont sensiblement les mêmes que dans le `Dockerfile` que nous avons
2022-02-24 19:43:43 +00:00
écrit précédemment.
2020-10-28 22:16:34 +00:00
2021-11-19 23:00:30 +00:00
Committons puis poussons notre travail. Dès qu'il sera reçu par Gitea, nous
devrions voir l'interface de Drone lancer les étapes décrites dans le fichier.
2020-10-28 22:16:34 +00:00
2021-11-19 23:00:30 +00:00
![Drone en action](../devops/drone-run.png){height=6cm}
::::: {.warning}
2022-02-24 19:43:43 +00:00
**IMPORTANT :** si vous avez l'impression que ça ne marche pas et que vous avez
2020-10-28 22:16:34 +00:00
réutilisé le fichier présent sur le dépôt au lieu de partir de l'exemple donné
dans la documentation, **commencez en partant de l'exemple de la
2022-02-24 19:43:43 +00:00
documentation** ! Le fichier présent sur le dépôt **ne fonctionnera pas** dans
votre situation !
2021-11-19 23:00:30 +00:00
:::::
2020-10-28 22:16:34 +00:00
2022-02-24 19:43:43 +00:00
Lorsqu'apparaît enfin la ligne `git.nemunai.re/youp0m`, le projet est compilé !
2020-10-28 22:16:34 +00:00
### Inspection qualité
2021-11-19 23:00:30 +00:00
Nous n'avons pas encore de test à proprement parler. Nous allons utiliser
2022-02-24 19:43:43 +00:00
[Sonarqube](https://www.sonarqube.org/) pour faire une revue qualité du code !
2020-10-28 22:16:34 +00:00
2022-02-24 19:43:43 +00:00
Tout d'abord, il faut lancer le conteneur Sonarqube :
2020-10-28 22:16:34 +00:00
<div lang="en-US">
```bash
docker run --rm -d --name sonarqube --network drone -p 9000:9000 sonarqube
```
</div>
Le service met un bon moment avant de démarrer, dès qu'il se sera initialisé,
nous pourrons accéder à l'interface sur <http://localhost:9000>.
En attendant qu'il démarre, nous pouvons commencer à ajouter le nécessaire à
2022-02-24 19:43:43 +00:00
notre `.drone.yml` : <http://plugins.drone.io/aosapps/drone-sonar-plugin/>.
2020-10-28 22:16:34 +00:00
Après s'être connecté à Sonarqube (`admin:admin`), nous pouvons aller générer
un token, tel que décrit dans la [documentation du plugin
Drone](http://plugins.drone.io/aosapps/drone-sonar-plugin/).
Une fois la modification commitée et poussée, Drone enverra le code à Sonarqube
qui en fera une analyse minutieuse. Rendez-vous sur
<http://127.0.0.1:9000/projects> pour admirer le résultat.
### Publier le binaire correspondant aux tags/jalons
Nous savons maintenant que notre projet compile bien dans un environnement
2022-02-24 19:43:43 +00:00
différent de celui du développeur ! Néanmoins, le binaire produit est perdu dès
2020-10-28 22:16:34 +00:00
lors que la compilation est terminée, car nous n'en faisons rien.
Ajoutons donc une nouvelle règle à notre `.droneci.yml` pour placer le binaire
2021-11-19 23:00:30 +00:00
au sein de la liste des fichiers téléchargeables aux côtés des tags.
2020-10-28 22:16:34 +00:00
2022-02-24 19:43:43 +00:00
Vous aurez sans doute besoin de :
2020-10-28 22:16:34 +00:00
- <https://docs.drone.io/pipeline/conditions/>
- <http://plugins.drone.io/drone-plugins/drone-gitea-release/>
2022-02-24 19:43:43 +00:00
Attention à ne pas stocker votre clef d'API dans le fichier YAML !
2020-10-28 22:16:34 +00:00
![Binaire publié automatiquement sur Gitea](../devops/tag-released.png){height=8cm}
2021-11-19 23:00:30 +00:00
::::: {.more}
2020-10-28 22:16:34 +00:00
Lorsque l'on est plusieurs à travailler sur le projet ou pour accroître la
sécurité, il convient de créer, un compte *bot* qui sera responsable de la
création des *releases*. Ce sera donc sa clef d'API que l'on indiquera dans
l'interface de Drone.
2021-11-19 23:00:30 +00:00
:::::