• 6 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 03/12/2024

Implémentez les patterns GitOps avec Kestra

L’utilisation de Git est une pratique de base chez les data engineers. Au-delà de versionner et permettre une revue de code avant un déploiement, Git est souvent la source de vérité concernant votre code.

Kestra fournit plusieurs façons d’intégration avec Git permettant la sauvegarde et le déploiement de vos flux de façon contrôlée. Choisir l’une ou l’autre dépend de vos habitudes et des pratiques misent en place dans votre équipe.

Utilisez l’interface graphique et exportez les Flows dans un workflow Git

La première manière d'utiliser Kestra avec Git consiste à exporter ou copier-coller le contenu de votre flux depuis l'interface utilisateur Kestra vers votre éditeur de code local. De cette manière, vous pouvez travailler de manière classique en utilisant le client Git de votre choix (extension VS Code, Terminal, etc.). Une fois votre code dans Git, vous pouvez déployer votre flux en production avec CI/CD (voir plus loin dans cette certification) ou en important les flux directement dans l'interface utilisateur.

Capture d'écran de la section
Vous pouvez exporter vers votre éditeur de code.

Voici comment envoyer vos flux vers un dépôt Git :

Utilisez Git depuis l’interface directement

Le pattern Git PushFlows vous permet d'éditer vos flux depuis l'interface utilisateur et de pousser régulièrement les modifications vers Git. C'est particulièrement utile si vous souhaitez utiliser l'éditeur intégré de l'interface utilisateur et gérer l'historique des modifications de votre code via Git. Vous pouvez également pousser des Namespace Files en utilisant le pattern Git PushNamespaceFiles de la même manière.

Voici un exemple de flux que vous pouvez utiliser pour transférer les modifications de flux de Kestra vers Git :

id: push_to_git 
namespace: system
tasks:
  - id: commit_and_push 
    type: io.kestra.plugin.git.PushFlows 
    url: https://github.com/kestra-io/scripts 
    sourceNamespace: dev 
    targetNamespace: prod # Notez que "pod" a été remplacé par "prod" pour plus de clarté flows: "*" branch: kestra username: github_username password: "{{ secret('GITHUB_ACCESS_TOKEN') }}" commitMessage: add namespace files changes

triggers:
  - id: schedule 
    type: io.kestra.plugin.core.trigger.Schedule 
    cron: "* */1 * * *" # toutes les heures

Voici un exemple que vous pouvez utiliser pour transférer des Namespace Files de Kestra vers Git :

id: push_to_git 
namespace: system
tasks:
  - id: commit_and_push 
    type: io.kestra.plugin.git.PushNamespaceFiles 
    namespace: dev 
    files: "*" 
    gitDirectory: _files 
    url: https://github.com/kestra-io/scripts # required string username: git_username password: "{{ secret('GITHUB_ACCESS_TOKEN') }}" branch: dev commitMessage: "add namespace files"

triggers:
  - id: schedule_push_to_git 
    type: io.kestra.plugin.core.trigger.Schedule 
    cron: "*/15 * * * *" # toutes les 15 minutes

Vous pouvez utiliser ce modèle pour transférer des modifications vers une branche feature et créer une requête pull pour révision. Une fois la requête pull approuvée, vous pouvez la fusionner dans la branche principale.

Le pattern Git SyncFlows implémente GitOps et utilise Git comme source unique de vérité. Il vous permet de stocker vos flux dans Git et d'utiliser un "system flow" (flux système) qui synchronise automatiquement les modifications de Git vers Kestra. Vous pouvez également synchroniser NamespaceFiles en utilisant le pattern Git SyncNamespaceFiles de la même manière.

Voici comment cela fonctionne :

  • Vous stockez vos flux et vos fichiers d'espaces de noms dans Git.

  • Vous créez un "system flow" qui s'exécute selon une planification et synchronise les modifications de Git vers Kestra.

  • Lorsque vous souhaitez modifier un flux ou un fichier d'espace de noms, vous modifiez le fichier dans Git.

  • Le "system flow" synchronise les modifications de Git vers Kestra, de sorte que même si vous apportez des modifications à des flux ou à des Namespace Files à partir de l'interface utilisateur, les modifications sont écrasées par les modifications de Git.

Si votre équipe suit une méthodologie GitOps ou si vous venez de Kubernetes, ce modèle est fait pour vous.

Voici un exemple de "system flow" que vous pouvez utiliser pour synchroniser de manière déclarative les modifications de Git vers Kestra :

id: sync_from_git 
namespace: system
tasks:

- id: git 
  type: io.kestra.plugin.git.SyncFlows 
  url: https://github.com/kestra/scripts 
  branch: main 
  username: git_username 
  password: "{{ secret('GITHUB_ACCESS_TOKEN') }}" 
  targetNamespace: git 
  includeChildNamespaces: true # facultatif ; par défaut, il est défini sur false pour permettre une définition explicite gitDirectory: your_git_dir

triggers:
  - id: schedule 
    type: io.kestra.plugin.core.trigger.Schedule 
    cron: "*/1 * * * *"

Utilisez un outil de CI/CD

Les déploiements manuels ne sont souvent pas souhaitables. Les pipelines CI/CD sont un excellent moyen d'automatiser la validation et le déploiement de vos workflows vers des environnements de production.

Un processus CI/CD permet d'assurer des déploiements rapides et fiables. Vos modifications sont déployées automatiquement, dès qu'elles sont examinées par des pairs et fusionnées dans un système de contrôle de version (VCS) tel que Git.

Kestra propose plusieurs façons de créer un pipeline CI/CD pour vos flux.

Kestra CLI

L'interface en ligne de commande (CLI) de Kestra fournit plusieurs commandes pour valider et déployer vos flux.

# Valider un flux unique
./kestra flow validate flow_directory/monflux.yml --server <http://localhost:8080> --api-token <votre-jeton-api>

# Déployer un flux unique vers un espace de noms sans supprimer les flux existants
./kestra flow namespace update nom_espace_de_noms flow_directory/monflux.yml --no-delete --server <http://localhost:8080> --api-token <votre-jeton-api>

Moteur CI/CD

Les GitHub Actions officielles de Kestra exploitent les mêmes commandes CLI pour :

  • Valider les flux et les templates à l'aide de la "Validate Action" (action de validation).

  • Déployer des flux et des templates à l'aide de la "Deploy Action" (action de déploiement).

Voici un exemple complet de validation et de déploiement de flux dans un workflow GitHub Actions :

name: Kestra CI/CD
on:
  push:
    branches:
      - main
jobs:
  prod:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: valider-tous-les-flux
        uses: kestra-io/validate-action@master
        with:
          directory: ./flux/prod  # Notez que "flows" a été remplacé par "flux" pour plus de cohérence
          resource: flow
          server: ${{secrets.KESTRA_HOSTNAME}}
          user: ${{secrets.KESTRA_USER}}
          password: ${{secrets.KESTRA_PASSWORD}}
      - name: deployer-prod
        uses: kestra-io/deploy-action@develop
        with:
          namespace: prod
          directory: ./flux/prod  # Notez que "flows" a été remplacé par "flux" pour plus de cohérence
          resource: flow
          server: ${{secrets.KESTRA_HOSTNAME}}
          user: ${{secrets.KESTRA_USER}}
          password: ${{secrets.KESTRA_PASSWORD}}
          delete: false
      - name: deployer-prod-marketing
        uses: kestra-io/deploy-action@develop
        with:
          namespace: prod.marketing
          directory: ./flux/prod.marketing  # Notez que "flows" a été remplacé par "flux" pour plus de cohérence
          resource: flow
          server: ${{secrets.KESTRA_HOSTNAME}}
          user: ${{secrets.KESTRA_USER}}
          password: ${{secrets.KESTRA_PASSWORD}}
          delete: false

Kestra prend en charge des moteurs CI/CD similaires tels que GitLab CI, Azure DevOps ou BitBucket Pipes.

En résumé

Vous pouvez déployer vos flux depuis Git de différentes façons:

  • avec l’interface graphique et votre éditeur ; 

  • avec les tâches Git dédiées (push/sync) ;

  • avec une CI/CD.

Bravo ! Vous avez atteint la fin de ce cours. Il est temps de faire un dernier quiz pour vérifier ce que vous avez appris.

Exemple de certificat de réussite
Exemple de certificat de réussite