Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Menu Docs

Crie a partir do seu próprio pipeline CI/CD

Neste guia, você pode aprender como construir e implantar um agente de seu próprio sistema CI/CD. Você pode usar essa abordagem em vez do pipeline de webhook do GitHub do Atlas Agent Engine.

Você pode implantar a partir de qualquer sistema CI/CD que possa enviar uma solicitação HTTPS com um cabeçalho, incluindo Drone, GitHub Actions, GitLab CI e Jenkins.

O Atlas Agent Engine não exige uma integração específica do fornecedor ou o agentengine CLI para construir e implantar. Seu pipeline implementa a mesma sequência de compilação e implantação que a CLI usando uma chave de API com escopo de projeto como sua credencial.

Dica

Para compilar e distribuir um agente a partir da CLI, consulte Construir a imagem do agente e distribuir sua compilação.

A maioria dos endpoints neste guia é definida por projeto e área de trabalho, no seguinte formato:

https://<gateway-host>/api/v1/projects/<project-id>/workspaces/<workspace-id>/...

Substitua <gateway-host> pelo host do seu ambiente. A tabela a seguir lista os hosts de gateway para cada ambiente:

ambiente
Host do gateway

Desenvolvimento

agentengine-dev.mongodb.com

QA

agentengine-qa.mongodb.com

Produção

agentengine.mongodb.com

Seu pipeline carrega a origem do agente como um arquivo, o que requer um workspace cujo tipo de origem seja archive. Um espaço de trabalho conectado ao GitHub rejeita a primeira chamada da sequência com um erro 409 UNSUPPORTED_SOURCE_TYPE. Um push aciona as compilações para esse espaço de trabalho, não um arquivo carregado.

Para criar um espaço de trabalho de origem de arquivo, execute o seguinte comando no diretório do seu agente:

agentengine init --org-id <org-id> --project-id <project-id>

O comando agentengine init registra um novo espaço de trabalho e estrutura as ferramentas de desenvolvimento local. Use o ID do espaço de trabalho que é impresso no caminho de cada endpoint neste guia. Para saber mais sobre este comando,consulte Registrar seu agente.

Se o agente já tiver um workspace conectado ao GitHub, você não precisará migrá-lo. Você tem as seguintes opções:

  • Continue usando o pipeline do webhook para esse espaço de trabalho.

  • Crie um segundo espaço de trabalho de origem de arquivamento para o mesmo agente e direcione-o a partir do seu pipeline. Você pode manter os dois espaços de trabalho simultaneamente.

Cada solicitação neste guia, exceto o upload de arquivo, é autenticada usando uma chave de API com escopo de projeto. Inclua a chave no cabeçalho Authorization de cada solicitação, no seguinte formato:

Authorization: Bearer <api-key>

Substitua o placeholder <api-key> pela sua chave de API. A chave API é o token do portador, então você não a troca por uma credencial separada.

Para criar uma chave de API, execute o seguinte comando:

agentengine api-key create --project-id <project-id> --description "CI pipeline" --expires-in 90

Você pode usar o sinalizador --expires-in para especificar a vida útil da chave. Para evitar uma credencial de longa duração em seu sistema CI/CD, você pode girar a chave em um cronograma definido por você. Para saber mais sobre esse comando e seus sinalizadores, consulte Gerenciar chaves de API e contas de serviço.

Importante

O comando exibe a chave de texto simples apenas uma vez. Você não pode recuperá-lo novamente. Se você perder a chave, revogue-a e crie uma nova.

Armazene a chave como um segredo em seu sistema CI/CD, como um segredo do Drone ou um segredo do repositório do GitHub Actions. Não grave a chave in-line em um arquivo de pipeline nem a confirme no controle de origem.

O Atlas Agent Engine não gira as chaves de API automaticamente, e nenhum comando atualiza uma chave existente. Para girar a chave que seu pipeline usa, crie uma nova chave e atualize o segredo em seu sistema de CI/CD. Revogue a chave antiga depois de confirmar que a nova chave funciona.

Mantenha ambas as chaves ativas durante a transição. Caso contrário, seu pipeline não terá chave válida para o período entre a revogação e a atualização.

Independentemente do seu sistema CI/CD, o pipeline tem a seguinte forma. Você pode implementar todas as etapas usando curl e jq:

check out your repository
-> archive your agent directory
-> POST builds/archive-init (save build_id and upload_url)
-> PUT upload_url (the archive)
-> POST builds/<build-id>/start
-> GET builds/<build-id> (until the status is terminal)
-> POST deployments (with build_id)

Uma sequência de compilação e implementação inclui as seguintes etapas:

  • Verificando e arquivando sua origem do agente

  • Iniciando o arquivo de compilação

  • Carregando a origem do agente

  • Iniciando a construção

  • Pesquisando o status da construção

  • Implantando a construção

Nesta seção, você pode aprender como implementar cada solicitação em seu pipeline.

1

Confira o commit ou ramificação que você deseja criar e, em seguida, crie um arquivo tar.gz do seu diretório de agente . O Atlas Agent Engine compila exatamente o arquivo que você carrega, então esta etapa determina o que a compilação contém.

O exemplo seguinte utiliza o comando tar para criar um arquivo denominado agent.tar.gz. O exemplo exclui artefatos de desenvolvimento local do arquivo, incluindo os diretórios .venv, __pycache__ e .agentengine e o arquivo .env.

tar --exclude='.venv' --exclude='__pycache__' \
--exclude='.agentengine' --exclude='.env' \
-czf agent.tar.gz -C <agent-directory> .
2

Antes de executar os comandos a seguir, defina essas variáveis de ambiente em seu tarefa de CI/CD:

export PROJECT_ID="<project-id>"
export WORKSPACE_ID="<workspace-id>"
export GATEWAY_HOST="agentengine-qa.mongodb.com"
export API_KEY="$CI_API_KEY"
export COMMIT_SHA="<commit-sha>"

Use o ID do projeto para seu projeto do Mecanismo Atlas Agent. Use a ID do espaço de trabalho retornada por agentengine init. Defina GATEWAY_HOST como o host do seu ambiente, conforme listado na tabela acima. Armazene a chave de API no armazenamento secreto do seu sistema CI/CD e exponha-a como CI_API_KEY. Defina COMMIT_SHA como o commit que você passa em git_info.commit_sha.

Para criar um registro de compilação e obter uma URL pré-assinada para o upload de origem, envie uma solicitação POST para o endpoint builds/archive-init executando o seguinte comando curl:

curl -s -X POST \
"https://$GATEWAY_HOST/api/v1/projects/$PROJECT_ID/workspaces/$WORKSPACE_ID/builds/archive-init" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"label": "my-ci-build-123",
"git_info": {
"commit_sha": "<commit-sha>",
"branch": "<branch-name>",
"dirty": false
},
"build_target": { "subdirectory": "" },
"auto_deploy": false
}'

Todos os campos no corpo da solicitação são opcionais. Para tornar a compilação reproduzível, sempre passe a propriedadegit_info.commit_sha . Sem ele, o Atlas Agent Engine marca a imagem resultante build-<random-id> em vez de sha-<commit-sha>.

Para que uma compilação bem-sucedida se implemente e pule a etapa final, defina auto_deploy como true.

Se a solicitação for bem-sucedida, o endpoint retornará uma resposta 201 Created que se assemelhará à seguinte:

{
"build_id": "bld_01ABC...",
"upload_url": "https://<presigned-s3-url>",
"upload_expires_at": "2026-01-01T00:05:00Z",
"source_type": "archive"
}
3

Para carregar seu diretório de agente , envie uma solicitação PUT que inclua o arquivamento como um arquivo tar.gz para o valor upload_url retornado da etapa anterior executando o seguinte comando curl:

curl -s -X PUT \
--upload-file agent.tar.gz \
-H "Content-Type: application/gzip" \
"$UPLOAD_URL"

Não envie um cabeçalho Authorization nesta solicitação. O URL assinado é a credencial e expira no momento fornecido pelo valor upload_expires_at retornado por archive-init. Se a URL de upload expirar antes de você usá-la, chame archive-init novamente para obter uma nova URL de upload.

Se o carregamento for bem-sucedido, o endpoint retornará uma resposta 200 OK.

4

Para confirmar que o carregamento chegou e colocar o tarefa de construção na fila, envie uma solicitação POST sem corpo para o endpoint builds/<build-id>/start e salve a resposta executando o seguinte comando curl:

RESPONSE=$(curl -s -X POST \
"https://$GATEWAY_HOST/api/v1/projects/$PROJECT_ID/workspaces/$WORKSPACE_ID/builds/$BUILD_ID/start" \
-H "Authorization: Bearer $API_KEY")
echo "$RESPONSE"

Se a solicitação for bem-sucedida, o endpoint retornará uma resposta 202 Accepted que se assemelhará à seguinte:

{ "build_id": "bld_01ABC...", "status": "accepted" }

Se uma compilação para o mesmo commit já estiver em execução, esse endpoint retornará um erro 409 BUILD_ALREADY_ACTIVE. O erro é uma proteção de construção duplicada em vez de uma falha transitória.

Quando disponível, a resposta inclui o ID e o status da compilação ativa no objetodetails :

{
"success": false,
"code": "BUILD_ALREADY_ACTIVE",
"details": {
"existing_build_id": "bld_01ABC...",
"existing_status": "in_progress"
}
}

Defina BUILD_ID para o valor details.existing_build_id e pesquise essa compilação em vez de inicializar outro arquivo de compilação:

BUILD_ID=$(printf '%s' "$RESPONSE" |
jq -r '.details.existing_build_id // empty')

Se a resposta não incluir existing_build_id, liste as compilações do espaço de trabalho e selecione a compilação ativa para o mesmo commit:

BUILD_ID=$(curl -s \
"https://$GATEWAY_HOST/api/v1/projects/$PROJECT_ID/workspaces/$WORKSPACE_ID/builds?limit=100" \
-H "Authorization: Bearer $API_KEY" |
jq -r --arg commit "$COMMIT_SHA" '
.builds[]
| select(.commit_sha == $commit)
| select(
.status == "queued" or
.status == "in_progress" or
.status == "waiting"
)
| .build_id' |
head -n 1)
5

Para aguardar a conclusão da compilação, pesquise o endpoint builds/<build-id> em um intervalo regular até que a compilação atinja um status de terminal. O exemplo a seguir pesquisa a cada cinco segundos e falha no pipeline após 30 minutos, para que uma compilação presa no estado queued ou waiting não possa manter seu tarefa de CI/CD em execução indefinidamente:

TIMEOUT_SECONDS=1800
INTERVAL_SECONDS=5
ELAPSED=0
while true; do
STATUS=$(curl -s \
"https://$GATEWAY_HOST/api/v1/projects/$PROJECT_ID/workspaces/$WORKSPACE_ID/builds/$BUILD_ID" \
-H "Authorization: Bearer $API_KEY" \
| jq -r '.status')
if [ "$STATUS" = "succeeded" ]; then
break
elif [ "$STATUS" = "failed" ] || [ "$STATUS" = "cancelled" ]; then
echo "Build $BUILD_ID ended with status: $STATUS" >&2
exit 1
elif [ "$ELAPSED" -ge "$TIMEOUT_SECONDS" ]; then
echo "Timed out after ${TIMEOUT_SECONDS}s waiting for build $BUILD_ID" >&2
exit 1
fi
sleep "$INTERVAL_SECONDS"
ELAPSED=$((ELAPSED + INTERVAL_SECONDS))
done

Quando a compilação atinge succeeded, o loop é encerrado e o pipeline continua para a próxima etapa. Quando atinge failed ou cancelled, ou quando o tempo limite termina, o exemplo é encerrado com um status diferente de zero, portanto o pipeline falha. Ajuste TIMEOUT_SECONDS e INTERVAL_SECONDS para corresponder à duração da compilação e à tolerância do sistema de CI/CD para chamadas de API.

Enquanto a compilação está em andamento, o endpoint retorna uma resposta semelhante à seguinte:

{
"build_id": "bld_01ABC...",
"status": "in_progress",
"executor_type": "vm",
"image_uri": null,
"lockfile_mode": null,
"error_message": null
}

A tabela seguinte descreve os valores status:

Status
Descrição

queued

A construção está esperando para começar. Continuar com a sondagem.

in_progress

A construção está em execução. Continuar com a sondagem.

waiting

Outra compilação atualmente ocupa o slot de compilação do espaço de trabalho. Continuar com a sondagem.

succeeded

A construção concluída e image_uri contém a imagem. Continue para a próxima etapa.

failed

A compilação não foi concluída. O campo error_message identifica a causa raiz onde o Atlas Agent Engine pode determiná-lo, como um arquivo de bloqueio desatualizado.

cancelled

Um usuário ou o Atlas Agent Engine cancelou a compilação.

O campo lockfile_mode informa se o Atlas Agent Engine cumprou um arquivo de bloqueio confirmado. Para saber mais, consulte Gerenciar dependências.

6

Para implantar a imagem produzida pela compilação, envie uma solicitação POST para o endpoint deployments executando o seguinte comando curl:

curl -s -X POST \
"https://$GATEWAY_HOST/api/v1/projects/$PROJECT_ID/workspaces/$WORKSPACE_ID/deployments" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{ "build_id": "'"$BUILD_ID"'" }'

O campo build_id é opcional. Se você omitir, o Atlas Agent Engine implementará a compilação bem-sucedida mais recente no espaço de trabalho.

Se a solicitação for bem-sucedida, o endpoint retornará uma resposta 202 Accepted que se assemelhará à seguinte:

{ "deployment_id": "deploy-abc123" }

A resposta confirma apenas que o Atlas Agent Engine aceitou a implementação. Para confirmar se o sistema está sendo executado corretamente, pesquise o endpoint deployments/current, conforme mostrado no exemplo a seguir:

curl -s \
"https://$GATEWAY_HOST/api/v1/projects/$PROJECT_ID/workspaces/$WORKSPACE_ID/deployments/current" \
-H "Authorization: Bearer $API_KEY"

O endpoint retorna a implantação ativa do espaço de trabalho, incluindo seu status, a prontidão de cada componente que o sistema executa e a integridade geral do sistema. A seguinte resposta é reduzida para os campos que uma verificação com script precisa:

{
"deployment_id": "deploy-abc123",
"status": "successful",
"components": [
{
"name": "agent",
"available": true,
"replicas": 1,
"ready_replicas": 1
}
],
"health": {
"available": true,
"checked_at": "2026-01-01T00:10:00Z"
}
}

Em uma implantação saudável, status é successful, cada entrada na array components tem available definido como true com ready_replicas igual a replicas e o campo health available do objeto é true.

O objeto git_info armazena metadados descrevendo a fonte que você já fez check-out. Ele não diz ao Atlas Agent Engine o que construir. A sequência de arquivo nunca clona ou verifica um repositório e não entra em contato com o GitHub. O Atlas Agent Engine cria exatamente o arquivo que você carrega.

A seleção do commit ou branch para construir acontece inteiramente em seu pipeline, antes de você inicializar o arquivo de construção. Seu pipeline verifica a referência de destino, arquiva esse diretório de trabalho e passa commit_sha e branch para rotular a compilação resultante. Esses valores têm os seguintes efeitos:

  • commit_sha determina a marcação de imagem e habilita a proteção de construção duplicada que a solicitação de início de construção se aplica.

  • branch está gravado para exibição.

Se você confirmar um arquivo uv.lock, o Atlas Agent Engine instalará exatamente esse conjunto de dependências bloqueadas e não resolverá novamente as dependências. A resposta de compilação informa lockfile_mode como honored. Se o arquivo de bloqueio estiver desatualizado ou não puder ser honrado, a compilação falhará com um valor acionado error_message em vez de instalar silenciosamente versões diferentes. Para resolver essa falha, execute uv lock localmente, confirme o arquivo de bloqueio atualizado e compile novamente.

Se você não confirmar um arquivo de bloqueio , o Atlas Agent Engine resolverá as dependências em cada compilação e reportará lockfile_mode como re-resolved. Este comportamento não é um erro.

Observação

Limitação de bloqueio de arquivo

O Atlas Agent Engine ainda não honra um arquivo de bloqueio confirmado para compilações de executor otimizadas para VM. Essas compilações sempre resolvam as dependências, independentemente de um arquivo de bloqueio confirmado. Para verificar se esta limitação se aplica à sua compilação, inspecione o campo executor_type na resposta do status da compilação. Um valor de vm indica uma compilação de executor otimizado para VM. Um valor de container indica um executor de contêiner.

Não liste os pacotes do Atlas Agent Engine SDK como dependências em seu arquivo pyproject.toml, incluindo os seguintes pacotes:

  • agentengine-langgraph

  • agentengine-core

  • runner-shared

  • agentengine-memory

Esses pacotes não são publicados em um índice de pacote . Declarar um faz com que uv lock falhe com um erro not found in the package registry. O Atlas Agent Engine sempre instala esses pacotes no ambiente do seu agente como discos pré-construídos em uma etapa separada, independentemente do que seu arquivo pyproject.toml declare. Seu agente pode importá-los no tempo de execução sem declará-los. Declare apenas as dependências do próprio seu agente.

A tabela a seguir descreve erros que você pode encontrar ao criar e implantar a partir de seu próprio pipeline:

Erro
Provável Causa

409 UNSUPPORTED_SOURCE_TYPE em archive-init

O espaço de trabalho é conectado ao GitHub em vez de ser fonte de arquivo. Crie um espaço de trabalho com fonte de arquivo.

409 BUILD_ALREADY_ACTIVE em start

Uma compilação para esta confirmação já está em execução. Use details.existing_build_id da resposta de erro como BUILD_ID. Se a resposta não incluir esse campo, liste as compilações do espaço de trabalho e selecione a compilação ativa para o mesmo commit. Pesquise essa compilação em vez de chamar archive-init novamente.

403 em cada solicitação de escrita

A conta que criou a chave de API não tem direitos suficientes no projeto. Crie a chave a partir de uma conta com direitos de gerenciamento de sistema.

403 com um motivo de incompatibilidade de projeto

O projeto da chave de API não corresponde ao ID do projeto no caminho da solicitação.

400 INVALID_BUILD_STATE em deployments

A compilação referenciada não foi bem-sucedida ou não existe.

409 DEPLOY_IN_PROGRESS em deployments

Uma implantação já está em andamento para este espaço de trabalho.

403 ou um erro de URL expirado no upload do arquivo

A URL pré-assinada expirou. Chame archive-init novamente para obter uma nova URL.

Uma falha de compilação que relata um arquivo uv.lock desatualizado

Execute o uv lock localmente, confirme o arquivo de bloqueio atualizado e construa novamente.

agent-engine-sdk-langgraph was not found in the package registry

Remova o pacote do SDK das dependências no seu arquivo pyproject.toml.

Depois de distribuir seu agente, você pode monitorar seu desempenho e atividade. Para saber como monitorar seu agente, consulte o guia Monitorar.