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.
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.