Configurer le CI/CD pour votre agent Databricks Apps
Un pipeline CI/CD exécute chaque modification apportée à votre agent via une revue de code et un déploiement automatisé, de sorte que les déploiements de production ne dépendent pas de l'ordinateur portable d'un seul développeur. Une fois le pipeline configuré, chaque Merge vers votre Branch principale déploie et redémarre votre agent sur Databricks Apps.
Cette page couvre les éléments spécifiques à l'agent. CI/CD pour Databricks Apps avec GitHub Actions décrit la configuration du workflow de base : la fédération d'identité de charge de travail, l'environnement GitHub et le YAML de déploiement. Complétez d'abord cette page, puis retournez ici pour les ajouts qui s'appliquent aux applications d'agents.
Exigences
- Une application d'agent déployée au moins une fois sur Databricks Apps à l'aide de l'OpenAI Agents SDK, de LangGraph ou d'un framework personnalisé. Consultez Créer un agent IA et le déployer sur Databricks Apps.
- Un Service Principal Databricks avec une politique de fédération GitHub Actions et
CAN MANAGEsur l'application. Voir l'étape 1. Configuration de la fédération d'identités de charge de travail. - Le CLI Databricks installé et authentifié localement. Consultez Installer ou mettre à jour la CLI Databricks.
Étape 1. Utilisez le workflow de démarrage
Plusieurs Template d'agent dans databricks/app-templates fournissent un .github/workflows/deploy.yml prêt à l'emploi, de sorte que vous n'ayez pas à écrire le workflow à partir de zéro.
- Choisissez un template d'agent parmi databricks/app-templates, tel que
agent-langgraphouagent-openai-agents-sdk. - Dans votre répertoire de Template cloné, vérifiez si
.github/workflows/deploy.ymlexiste. - Configurez le workflow :
- **Si
deploy.ymlexiste** : ouvrez-le, confirmez quedatabricks bundle runl'étape référence la clé de ressource de votre bundle à partirdatabricks.ymlde, et suivez les prérequis dans le commentaire d'en-tête du fichier. - Si
deploy.ymln'existe pas : Copiez-le depuis un Template qui existe, ou depuis Étape 4. ajoutez le workflow de déploiement. Ensuite, mettez à jour l'étapedatabricks bundle run <key>pour correspondre à la clé de ressource de votre bundle.
- **Si
Étape 2. Préremplissez l’ID de l’expérience MLflow
Les Template d'agent laissent MLFLOW_EXPERIMENT_ID vide dans databricks.yml. Le script quickstart le remplit localement lors de la première configuration, mais un nouveau runner CI ne le fait pas. Si experiment_id est vide, databricks bundle deploy échoue avec une erreur de type Terraform (For input string: "").
Pour corriger cela, commit la valeur renseignée :
- Exécutez
uv run quickstart --profile <your-profile>localement sur la machine où vous avez créé l'agent. - Vérifiez que la Ressource d'Experimentation dans
databricks.yml(l'entrée avecname: 'experiment'sousresources.apps.<key>.resources) a maintenant unexperiment_idnumérique. - commit la modification.
L'expérimentation est limitée au workspace, donc le même ID est valide pour chaque déploiement CI ciblant ce workspace. Si vous déployez sur plusieurs workspaces, déclarez une expérimentation par cible dans databricks.yml (une par bloc targets.<env>) ou utilisez une variable de bundle.
Accorder les autorisations Postgres pour les Template de mémoire Lakebase
Les templates d'agent avancés (agent-langgraph-advanced, agent-openai-advanced) déclarent une ressource Lakebase Postgres à autoscaling directement dans databricks.yml. Avec Databricks CLI v0.295.0 et versions ultérieures, databricks bundle deploy provisionne la ressource à côté de l'application.
La ressource DAB postgres accorde au Service Principal Databricks de l'application un accès au niveau du Workspace au projet Lakebase, mais Lakebase conserve une couche distincte de rôles Postgres pour l'accès aux bases de données (schémas, tables et séquences). Le Service Principal Databricks a besoin d'un rôle Postgres avec les bons privilèges avant que l'agent puisse lire ou écrire ses tables de mémoire. Voir l'architecture d'authentification pour le modèle à deux couches.
L'octroi de ces privilèges de niveau Postgres est une configuration unique . Exécutez-le localement entre le bundle deploy er et le bundle rune. Le CI se redéploie après ce flux à travers le chemin standard deploy puis run, car le rôle Postgres du Service Principal Databricks persiste pendant toute la durée de vie de l'application.
-
Déployez le bundle pour le provisionnement de la ressource Lakebase :
Bashdatabricks bundle deploy --target prod -
Accorder au Service Principal Databricks les privilèges de niveau Postgres dont il a besoin :
Bashuv run python scripts/grant_lakebase_permissions.py \
"$(databricks apps get <app-name> --output json | jq -r '.service_principal_client_id')" \
--memory-type openai \
--autoscaling-endpoint <endpoint>Pour le template LangGraph, transmettez
--memory-type langgraph. Le script accepte également--project <project> --branch <branch>pour le dimensionnement automatique de Lakebase, ou--instance-name <name>pour Lakebase provisionnée. -
start l’application :
Bashdatabricks bundle run <bundle-key> --target prod
Étape 3. Effectuer un test de fumée sur l'agent déployé
databricks bundle run revient dès que le runner signale à l’agent de start, mais le processus de l’agent peut encore échouer au démarrage. Après la vérification de l’état de santé de Étape 5. Attendez que l’application soit saine, ajoutez l’étape de test de fumée suivante à deploy.yml qui envoie une requête canari à /invocations:
- name: Smoke test invocations
env:
APP_NAME: my-agent
run: |
APP_URL=$(databricks apps get "$APP_NAME" --output json | jq -r '.url')
TOKEN=$(databricks auth token | jq -r '.access_token')
STATUS=$(curl -sS -o /tmp/canary.json -w "%{http_code}" \
-X POST "$APP_URL/invocations" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"input": [{"role": "user", "content": "ping"}], "stream": false}')
if [ "$STATUS" != "200" ]; then
echo "Smoke test failed with status $STATUS:" >&2
cat /tmp/canary.json >&2
exit 1
fi
echo "Smoke test passed."
Databricks Apps n'acceptent que les jetons OAuth pour l'invocation. Utilisez le jeton OAuth de databricks auth token Workspace ; les Databricks Apps rejettent tout autre type de jeton.