Woodpecker CI, envoyer du mail dans certaines conditions

En juin dernier, j'ai migré ma plateforme d'intégration continue vers Woodpecker CI et j'en suis très satisfait.

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.

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 drillster/drone-email, initialement destinée à Drone. En combinant cette image et evaluate, je pensais pouvoir réaliser ce que je voulais :

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é drillster/drone-email pour créer deblan/woodpecker-email. Cette image est totalement orientée vers 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é.

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 Gitnet et l'image est à la fois publiée sur Docker Hub et Gitnet.

Simon Vieille

Détecter les vulnérabilités dans les dépendances de son projet

Détecter les vulnérabilités dans les dépendances de son projet

La gestion des dépendances dans un projet est quelque chose de complexe. Il y a autant de ge…

Un modèle pour démarrer un script shell

Un modèle pour démarrer un script shell

J'ai régulièrement le besoin d'écrire des scripts shell un peu évolués. Il y a quelques mois…

100ème publication et 3ème anniversaire de Custom Menu 🎂

100ème publication et 3ème anniversaire de Custom Menu 🎂

Il y a trois ans, j'ai publié la première version de mon application. Elle a été développée …


Ajouter un commentaire

Votre commentaire - Vous pouvez utiliser du markdown

Renouveler