83 lines
3.2 KiB
Plaintext
83 lines
3.2 KiB
Plaintext
# Woodpecker CI, envoyer du mail dans certaines conditions
|
|
|
|
* 2023-01-04 22:40:00
|
|
* Développement, Projets personnels
|
|
|
|
En juin dernier, j'ai migré ma plateforme d'intégration continue vers
|
|
=> https://woodpecker-ci.org/ Woodpecker CI
|
|
et j'en suis très satisfait.
|
|
|
|
=> https://woodpecker-ci.org/ Woodpecker CI
|
|
permet de créer des conditions d'exécution des étapes avec la clause `evaluate`. Elle doit être définie dans la section `when` des étapes concernées. Voici un exemple avec une condition sur la valeur de la variable `CI_BUILD_EVENT` pour l'étape `foo`.
|
|
|
|
```{.language-yaml}
|
|
pipeline:
|
|
foo:
|
|
image: vendor/image
|
|
when:
|
|
- evaluate: 'CI_BUILD_EVENT == "push"'
|
|
```
|
|
|
|
Je souhaite avoir est une notification par mail quand une étape du pipeline échoue ou dès lors que le précédent pipeline a échoué. L'idée est d'être notifié quand il y a eu un problème et quand il est résolu. L'image plus ou moins officielle pour envoyer du mail est
|
|
=> https://github.com/drillster/drone-email drillster/drone-email
|
|
, initialement destinée à
|
|
=> https://www.drone.io/ Drone
|
|
. En combinant cette image et `evaluate`, je pensais pouvoir réaliser ce que je voulais :
|
|
|
|
```{.language-yaml}
|
|
pipeline:
|
|
mail:
|
|
image: drillster/drone-email
|
|
settings:
|
|
host:
|
|
from_secret: mail_host
|
|
username:
|
|
from_secret: mail_username
|
|
password:
|
|
from_secret: mail_password
|
|
from:
|
|
from_secret: mail_from
|
|
subject: "[{{ repo.owner }}/{{ repo.name }}] Pipeline #{{ build.number }}: {{ build.status }}"
|
|
when:
|
|
- evaluate: 'CI_STEP_STATUS == "failure" || CI_PREV_PIPELINE_STATUS == "failure"'
|
|
```
|
|
|
|
Le problème est que l'expression est évaluée avant la génération du pipeline donc `CI_STEP_STATUS` n'existe pas encore et l'étape `mail` est ignorée sauf si le précédent pipeline a échoué.
|
|
|
|
Pour résoudre mon problème, j'ai forké
|
|
=> https://github.com/drillster/drone-email drillster/drone-email
|
|
pour créer
|
|
=> https://gitnet.fr/deblan/woodpecker-email deblan/woodpecker-email
|
|
. Cette image est totalement orientée vers
|
|
=> https://woodpecker-ci.org/ Woodpecker CI
|
|
et permet de définir une `evaluate` au niveau de `settings`. J'ai fais en sorte que l'expression soit évaluée au moment de l'exécution de l'étape et si la condition n'est pas validée alors aucun mail n'est envoyé.
|
|
|
|
```{.language-yaml}
|
|
pipeline:
|
|
mail:
|
|
image: deblan/woodpecker-email
|
|
settings:
|
|
host:
|
|
from_secret: mail_host
|
|
username:
|
|
from_secret: mail_username
|
|
password:
|
|
from_secret: mail_password
|
|
from:
|
|
from_secret: mail_from
|
|
subject: "[{{ repo.owner }}/{{ repo.name }}] Pipeline #{{ build.number }}: {{ build.status }}"
|
|
evaluate: 'CI_STEP_STATUS == "failure" || CI_PREV_PIPELINE_STATUS == "failure"'
|
|
when:
|
|
- status: [success, failure]
|
|
```
|
|
|
|
Mon problème est résolu !
|
|
|
|
Le code source est disponible sur
|
|
=> https://gitnet.fr/deblan/woodpecker-email Gitnet
|
|
et l'image est à la fois publiée sur
|
|
=> https://hub.docker.com/r/deblan/woodpecker-email Docker Hub
|
|
et
|
|
=> https://gitnet.fr/deblan/-/packages/container/woodpecker-email/latest Gitnet
|
|
.
|