Configure o CI/CD para seu agente do Databricks Apps
Um pipeline de CI/CD executa cada alteração em seu agente por meio de revisão de código e uma implantação automatizada, para que as implantações em produção não dependam do laptop de um único desenvolvedor. Uma vez que o pipeline estiver configurado, cada merge para sua branch principal implanta e reinicia seu agente no Databricks Apps.
Esta página aborda as partes específicas do agente. CI/CD para Databricks Apps com GitHub Actions documenta a configuração do fluxo de trabalho principal: a federação de identidade de carga de trabalho, o ambiente GitHub e o YAML de implantação. Conclua essa página primeiro, depois retorne aqui para as adições que se aplicam a aplicativos de agente.
Requisitos
- Um aplicativo de agente implantado pelo menos uma vez no Databricks Apps usando o OpenAI Agents SDK, LangGraph ou uma estrutura personalizada. Consulte Crie um agente de AI e o implante no Databricks Apps.
- Um Service Principal do Databricks com uma política de federação do GitHub Actions e
CAN MANAGEno aplicativo. Consulte Passo 1. Configure a federação de identidade de carga de trabalho. - A CLI do Databricks instalada e autenticada localmente. Consulte Instalar ou atualizar a CLI do Databricks.
O passo 1. Use o fluxo de trabalho inicial
Vários modelos de agente em databricks/app-templates disponibilizam um .github/workflows/deploy.yml pronto para uso, assim você não precisa escrever o fluxo de trabalho do zero.
- Selecione um padrão de agente em databricks/app-templates, como
agent-langgraphouagent-openai-agents-sdk. - No seu diretório de padrão clonado, verifique se
.github/workflows/deploy.ymlexiste. - Configurar o fluxo de trabalho:
- **Se
deploy.ymlexistir**: Abra-o, confirme que odatabricks bundle runo passo referencia a key do recurso do seu pacote dedatabricks.ymle siga os pré-requisitos no comentário do cabeçalho do arquivo. - Se
deploy.ymlnão existir : Copie-o de um padrão existente, ou do o Passo 4. Adicionar o fluxo de trabalho de implantação. Em seguida, atualize odatabricks bundle run <key>passo para corresponder à key de recurso do seu bundle.
- **Se
Etapa 2. Pré-preencha a ID do experimento MLflow
Os padrões de agente deixam MLFLOW_EXPERIMENT_ID vazio em databricks.yml. O script quickstart o preenche localmente na primeira configuração, mas um CI runner novo não. Se experiment_id estiver vazio, databricks bundle deploy falha com um erro de tipo do Terraform (For input string: "").
Para corrigi-lo, faça commit do valor preenchido:
- Execute
uv run quickstart --profile <your-profile>localmente na máquina onde você criou o agente. - Verifique se o recurso de experimento em
databricks.yml(a entrada comname: 'experiment'emresources.apps.<key>.resources) agora tem umexperiment_idnumérico. - commit a alteração.
O experimento tem escopo de workspace, então o mesmo ID é válido para cada implantação de CI que tem como alvo esse workspace. Se você implantar em vários workspaces, declare um experimento por destino em databricks.yml (um por bloco targets.<env>) ou use uma variável de pacote.
Conceder permissões Postgres para padrões de memória do Lakebase
Os padrão de agente avançados (agent-langgraph-advanced, agent-openai-advanced) declaram um recurso Lakebase Postgres de autoscale diretamente em databricks.yml. Com a CLI do Databricks v0.295.0 e posterior, databricks bundle deploy provisiona o recurso juntamente com o aplicativo.
O recurso postgres do DAB concede ao service principal do Databricks do aplicativo acesso em nível de workspace ao projeto Lakebase, mas o Lakebase mantém uma camada separada de função Postgres para acesso ao banco de dados (esquemas, tabelas e sequências). O service principal do Databricks precisa de uma função Postgres com os privilégios certos antes que o agente possa ler ou gravar suas tabelas de memória. Consulte Arquitetura de autenticação para o modelo de duas camadas.
A concessão desses privilégios em nível de Postgres é uma configuração única . Execute-o localmente entre o primeiro bundle deploy e bundle run. O CI é reimplantado após esse fluxo através do caminho padrão deploy e depois run, porque a função Postgres do Service Principal da Databricks persiste durante a vida útil do aplicativo.
-
Implante o pacote para provisionar o recurso Lakebase:
Bashdatabricks bundle deploy --target prod -
Conceda ao Service Principal do Databricks os privilégios de nível de Postgres de que ele precisa:
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>Para o padrão LangGraph, passe
--memory-type langgraph. O script também aceita--project <project> --branch <branch>para autoscaling do Lakebase, ou--instance-name <name>para Lakebase provisionado. -
Inicie o aplicativo:
Bashdatabricks bundle run <bundle-key> --target prod
Passo 3. Realize um teste de fumaça do agente implantado
databricks bundle run retorna assim que o executor sinaliza ao agente para iniciar, mas o processo do agente ainda pode falhar durante a inicialização. Após a verificação de integridade de Passo 5. Aguarde até que o aplicativo esteja íntegro, adicione o seguinte passo de teste de fumaça a deploy.yml que envia uma solicitação canary para /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."
O Databricks Apps aceita apenas tokens OAuth para invocação. Use o token OAuth do Workspace de databricks auth token; o Databricks Apps rejeita qualquer outro tipo de token.