AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs Menu

자체 CI/CD 파이프라인에서 구축

이 가이드 에서는 자체 CI/CD 시스템에서 에이전트 빌드 하고 배포 방법을 학습 수 있습니다. Atlas Agent Engine GitHub 웹훅 파이프라인 대신 이 접근 방식을 사용할 수 있습니다.

Drone, GitHub Actions, GitLab CI, Jenkins 등 헤더가 포함된 HTTPS 요청 보낼 수 있는 모든 CI/CD 시스템에서 배포 할 수 있습니다.

Atlas Agent Engine은 빌드 및 배포 위해 공급업체별 통합이나 agentengine CLI 필요하지 않습니다. 파이프라인 프로젝트 범위 API 키를 자격 증명으로 사용하여 CLI 와 동일한 빌드 및 배포 시퀀스를 구현합니다.

팁

대신 CLI 에서 에이전트 빌드 하고 배포 하려면 에이전트 이미지 빌드 및 빌드 배포를 참조하세요.

이 가이드 에 나오는 대부분의 엔드포인트는 다음과 같은 형식으로 프로젝트 와 작업 공간별로 범위가 지정됩니다.

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

<gateway-host>를 해당 환경의 호스팅하다 로 바꿉니다. 다음 표에는 각 환경에 대한 게이트웨이 호스트가 나열되어 있습니다.

환경
게이트웨이 호스팅하다

개발

agentengine-dev.mongodb.com

QA

agentengine-qa.mongodb.com

프로덕션

agentengine.mongodb.com

파이프라인 에이전트 소스를 아카이브로 업로드하며, 여기에는 소스 유형이 archive인 작업 공간이 필요합니다. GitHub에 연결된 작업 공간은 409 UNSUPPORTED_SOURCE_TYPE 오류와 함께 시퀀스의 첫 번째 호출을 거부합니다. 푸시는 업로드된 아카이브가 아닌 해당 작업 공간에 대한 빌드를 트리거합니다.

아카이브 소스 작업 공간을 만들려면 에이전트의 디렉토리 에서 다음 명령을 실행 .

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

agentengine init 명령은 새 작업 공간을 등록하고 로컬 개발 도구를 스캐폴딩합니다. 이 가이드 의 모든 엔드포인트 경로에 인쇄되는 작업 공간 ID 사용합니다. 이 명령에 대해 자세히 학습 에이전트 등록을 참조하세요.

에이전트 에 이미 GitHub 연결 작업 공간이 있는 경우 마이그레이션 할 필요가 없습니다. 다음과 같은 옵션이 있습니다.

  • 해당 작업 공간에 대해 웹훅 파이프라인 계속 사용합니다.

  • 동일한 에이전트 에 대한 두 번째 아카이브 소스 작업 공간을 만들고 파이프라인 에서 대상으로 지정합니다. 두 작업 공간을 동시에 유지 관리할 수 있습니다.

아카이브 업로드를 제외한 이 가이드 의 모든 요청 프로젝트 범위 API 키를 사용하여 인증합니다. 다음 형식으로 각 요청 의 Authorization 헤더에 키를 포함합니다.

Authorization: Bearer <api-key>

<api-key> 자리 표시자를 API 키로 바꿉니다. API 키는 베어러 토큰이므로 별도의 자격 증명으로 교환하지 않아도 됩니다.

API 키를 생성하려면 다음 명령을 실행 .

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

--expires-in 플래그를 사용하여 키의 수명을 지정할 수 있습니다. CI/CD 시스템에서 자격 증명이 오래 사용되는 것을 방지하려면 정의한 예정 에 따라 키를 순환시킬 수 있습니다. 이 명령과 해당 플래그에 대해 자세히 학습 API 키 및 서비스 계정 관리를 참조하세요.

중요

이 명령은 일반 텍스트 키를 한 번만 표시합니다. 다시 조회 할 수 없습니다. 키를 분실한 경우 키를 해지하고 새 키를 생성합니다.

키를 CI/CD 시스템에 Drone 시크릿 또는 GitHub 작업 리포지토리 시크릿과 같은 시크릿으로 저장합니다. 키를 파이프라인 파일 에 인라인으로 쓰기 (write) 소스 제어에 커밋 마세요.

Atlas Agent Engine은 API 키를 자동으로 로테이션하지 않으며, 기존 키를 갱신하는 명령도 없습니다. 파이프라인 에서 사용하는 키를 순환하려면 새 키를 생성하고 CI/CD 시스템에서 시크릿을 업데이트 . 새 키가 작동하는지 확인한 후 이전 키를 해지합니다.

전환하는 동안 두 키를 모두 활성 상태로 유지합니다. 그렇지 않으면 철회와 업데이트 사이의 기간 동안 파이프라인 유효한 키가 없습니다.

CI/CD 시스템에 관계없이 파이프라인 다음과 같은 형태를 갖습니다. curl 및 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)

빌드 및 배포 시퀀스에는 다음 단계가 포함됩니다.

  • 에이전트 소스 체크아웃 및 보관

  • 빌드 아카이브 초기화

  • 에이전트 소스 업로드

  • 빌드 시작

  • 빌드 상태 폴링

  • 빌드 배포

이 섹션에서는 파이프라인 에서 각 요청 구현 방법을 학습 수 있습니다.

1

빌드 하려는 커밋 또는 브랜치를 확인한 다음 에이전트 디렉토리 의 tar.gz 아카이브를 생성합니다. Atlas Agent 엔진은 업로드한 아카이브를 정확히 빌드하므로 이 단계에서 빌드 에 포함할 내용을 결정합니다.

다음 예시 tar 명령을 사용하여 agent.tar.gz이라는 이름의 아카이브를 생성합니다. 이 예시 .venv, __pycache__, .agentengine 디렉토리와 .env 파일 포함한 로컬 개발 아티팩트를 아카이브에서 제외합니다.

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

다음 명령을 실행 전에 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>"

Atlas Agent Engine 프로젝트 의 프로젝트 ID 사용합니다. agentengine init에서 반환된 작업 공간 ID 사용합니다. 위 표에 나열된 대로 GATEWAY_HOST을 환경의 호스팅하다 로 설정합니다. API 키를 CI/CD 시스템의 시크릿 저장 에 저장하고 CI_API_KEY로 노출합니다. COMMIT_SHA를 git_info.commit_sha에서 전달한 커밋 으로 설정합니다.

빌드 기록 생성하고 소스 업로드를 위한 미리 서명된 URL 얻으려면 다음 curl 명령을 실행 하여 builds/archive-init 엔드포인트에 POST 요청 보냅니다.

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
}'

요청 본문의 모든 필드는 선택 사항입니다. 빌드 재현 가능하게 만들려면 항상 git_info.commit_sha 속성 전달하세요. 이 파일이 없으면 Atlas Agent Engine이 결과 이미지에 sha-<commit-sha> 대신 build-<random-id>에 태그를 지정합니다.

빌드 성공적인 으로 배포 하고 마지막 단계를 건너뛰려면 auto_deploy를 true로 설정하다 .

요청 성공하면 엔드포인트는 다음과 유사한 201 Created 응답을 반환합니다.

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

에이전트 디렉토리 업로드하려면 다음 curl 명령을 실행 하여 이전 단계에서 반환된 upload_url 값에 아카이브를 tar.gz 파일 로 포함하는 PUT 요청 보냅니다.

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

이 요청 에 대해 Authorization 헤더를 보내지 마세요. 미리 서명된 URL 자격 증명이며, archive-init가 반환한 upload_expires_at 값에 지정된 시간에 만료됩니다. 업로드 URL 사용하기 전에 만료되는 경우, archive-init를 다시 호출하여 새 업로드 URL 받으세요.

업로드가 성공하면 엔드포인트가 200 OK 응답을 반환합니다.

4

업로드가 도착했는지 확인하고 빌드 작업 대기열에 추가하려면 본문 없이 POST 요청 builds/<build-id>/start 엔드포인트에 보내고 다음 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"

요청 성공하면 엔드포인트는 다음과 유사한 202 Accepted 응답을 반환합니다.

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

동일한 커밋 에 대한 빌드 이미 실행 경우 이 엔드포인트는 409 BUILD_ALREADY_ACTIVE 오류를 반환합니다. 이 오류는 일시적인 오류가 아닌 중복 빌드 가드입니다.

사용 가능한 경우 응답에는 details 객체 에 있는 활성 빌드 의 ID 와 상태가 포함됩니다.

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

다른 빌드 아카이브를 초기화하는 대신 BUILD_ID를 details.existing_build_id 값으로 설정하고 해당 빌드 폴링합니다.

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

응답에 existing_build_id가 포함되지 않은 경우, 작업 공간 빌드를 나열하고 동일한 커밋 에 대한 활성 빌드 선택합니다.

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

빌드 완료될 때까지 기다리려면 빌드 터미널 상태에 도달할 때까지 정기적으로 builds/<build-id> 엔드포인트를 폴링합니다. 다음 예시 5초마다 폴링하고 30분 후에 파이프라인 에 실패하므로 queued 또는 waiting 상태 에서 멈춘 빌드 로 인해 CI/CD 작업 무기한 실행 수 없습니다.

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

빌드 succeeded에 도달하면 루프가 종료되고 파이프라인 다음 단계로 계속 진행됩니다. failed 또는 cancelled에 도달하거나 시간 제한이 경과하면 0이 아닌 상태로 예시 가 종료되어 파이프라인 실패합니다. 빌드 기간과 API 호출에 대한 CI/CD 시스템의 허용 오차에 맞게 TIMEOUT_SECONDS 및 INTERVAL_SECONDS를 조정합니다.

빌드 진행되는 동안 엔드포인트는 다음과 유사한 응답을 반환합니다.

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

다음 표에서는 status 값에 대해 설명합니다.

상태
설명

queued

빌드 시작되기를 기다리고 있습니다. 폴링을 계속합니다.

in_progress

빌드 실행 입니다. 폴링을 계속합니다.

waiting

현재 다른 빌드 작업 공간 빌드 슬롯이 있습니다. 폴링을 계속합니다.

succeeded

빌드 완료되고 image_uri에 이미지가 포함됩니다. 다음 단계로 계속 진행합니다.

failed

빌드 완료되지 않았습니다. error_message 필드 오래된 락 파일 과 같이 Atlas Agent Engine이 이를 확인할 수 있는 근본 원인을 식별합니다.

cancelled

사용자 또는 Atlas Agent Engine이 빌드 취소했습니다.

lockfile_mode 필드 Atlas Agent Engine이 커밋된 락 파일 준수하는지 여부를 보고합니다. 자세한 학습 은 종속성 관리를 참조하세요.

6

빌드 생성한 이미지를 배포 하려면 다음 curl 명령을 실행 하여 deployments 엔드포인트에 POST 요청 보냅니다.

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"'" }'

build_id 필드 선택 사항입니다. 이를 생략하면 Atlas Agent 엔진이 작업 공간에서 가장 최근에 성공적인 빌드 배포합니다.

요청 성공하면 엔드포인트는 다음과 유사한 202 Accepted 응답을 반환합니다.

{ "deployment_id": "deploy-abc123" }

응답은 Atlas Agent Engine이 배포서버 수락했다는 것만 확인시켜 줍니다. 배포서버 올바르게 실행 있는지 확인하려면 다음 예시 와 같이 deployments/current 엔드포인트를 폴링합니다.

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

엔드포인트는 상태, 배포서버 실행하는 각 구성 요소의 준비 상태, 배포의 전반적인 상태를 포함하여 작업 공간의 활성 배포서버 반환합니다. 다음 응답은 스크립팅된 검사에 필요한 필드로 잘립니다.

{
"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"
}
}

정상 배포서버 에서 status는 successful이고, components 배열 의 모든 항목에는 available가 true로 설정하다 있고, ready_replicas는 replicas와 동일하며, health 객체의 available 필드. true입니다.

git_info 객체 이미 체크아웃한 소스를 설명하는 메타데이터 저장합니다. Atlas Agent Engine에 무엇을 빌드 할지 알려주지 않습니다. 아카이브 시퀀스는 리포지토리 복제하거나 체크아웃하지 않으며 GitHub에 문의 하지 않습니다. Atlas Agent 엔진은 사용자가 업로드하는 아카이브를 정확히 빌드합니다.

빌드 할 커밋 또는 브랜치를 선택하는 것은 빌드 아카이브를 초기화하기 전에 파이프라인 에서 완전히 발생합니다. 파이프라인 은 대상 참조를 체크아웃하고, 해당 작업 디렉토리 보관하며, commit_sha 및 branch를 전달하여 결과 빌드 에 레이블을 지정합니다. 이러한 값은 다음과 같은 효과가 있습니다.

  • commit_sha 이미지 태그를 지정하다 결정하고 빌드 시작 요청 적용되는 중복 빌드 가드를 활성화합니다.

  • branch 표시를 위해 기록됩니다.

uv.lock 파일 커밋 경우, Atlas Agent Engine은 잠긴 종속성 설정하다 정확히 설치하고 종속성을 다시 해결하지 않습니다. 빌드 응답은 lockfile_mode을 honored로 보고합니다. 락 파일 오래되었거나 적용할 수 없는 경우, 다른 버전을 자동으로 설치하는 대신 실행 가능한 error_message 값으로 빌드 실패합니다. 이 실패를 해결하려면 로컬에서 uv lock를 실행 업데이트된 락 파일 커밋 다음 다시 빌드 .

락 파일 커밋 하지 않으면 Atlas Agent Engine이 모든 빌드 의 종속성을 확인하고 lockfile_mode을 re-resolved로 보고합니다. 이 동작은 오류가 아닙니다.

참고

파일 제한 잠금

Atlas Agent 엔진은 아직 VM에 최적화된 실행기 빌드에 대해 커밋된 락 파일 적용하지 않습니다. 이러한 빌드는 커밋된 락 파일 에 관계없이 항상 종속성을 다시 해결합니다. 이 제한이 자신의 빌드 에 적용되는지 확인하려면 빌드 상태 응답의 executor_type 필드 검사하세요. vm 값은 VM에 최적화된 실행기 빌드 나타냅니다. container 값은 컨테이너 실행기를 나타냅니다.

다음 패키지를 포함하여 pyproject.toml 파일 에 Atlas Agent Engine SDK 패키지를 종속성으로 나열하지 마세요.

  • agentengine-langgraph

  • agentengine-core

  • runner-shared

  • agentengine-memory

이러한 패키지는 패키지 인덱스 에 게시되지 않습니다. 선언하면 uv lock가 not found in the package registry 오류와 함께 실패합니다. Atlas Agent Engine은 pyproject.toml 파일 선언한 내용에 관계없이 항상 별도의 단계에서 사전 빌드된 휠로 이러한 패키지를 에이전트의 환경에 설치합니다. 에이전트 는 선언하지 않고 런타임에 가져올 수 있습니다. 에이전트의 자체 종속성만 선언합니다.

다음 표에서는 자체 파이프라인 에서 빌드 하고 배포 때 발생할 수 있는 오류에 대해 설명합니다.

오류
가능한 원인

409 UNSUPPORTED_SOURCE_TYPE on archive-init

작업 공간은 아카이브 소스가 아닌 GitHub에 연결되어 있습니다. 아카이브 소스 작업 공간을 만듭니다.

409 BUILD_ALREADY_ACTIVE on start

이 커밋 에 대한 빌드 이미 실행 입니다. 오류 응답의 details.existing_build_id을 BUILD_ID(으)로 사용합니다. 응답에 해당 필드 포함되어 있지 않으면 작업 공간 빌드를 나열하고 동일한 커밋 에 대한 활성 빌드 선택합니다. archive-init를 다시 호출하는 대신 해당 빌드 폴링합니다.

403 모든 쓰기 (write) 요청 에서

API 키를 생성한 계정에 프로젝트 에 대한 충분한 권한이 없습니다. 배포서버 관리 권한이 있는 계정에서 키를 생성합니다.

403 프로젝트 불일치 이유가 있는 경우

API 키의 프로젝트 요청 경로의 프로젝트 ID 와 일치하지 않습니다.

400 INVALID_BUILD_STATE on deployments

참조된 빌드 성공하지 못했거나 존재하지 않습니다.

409 DEPLOY_IN_PROGRESS on deployments

이 작업 공간에 대한 배포서버 이미 진행 중입니다.

403 또는 아카이브 업로드의 만료된 URL 오류

미리 서명된 URL 만료되었습니다. archive-init를 다시 호출하여 새 URL 가져옵니다.

오래된 uv.lock 파일 보고하는 빌드 실패

로컬에서 uv lock를 실행하고 업데이트된 락 파일 커밋 다음 다시 빌드 .

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

pyproject.toml 파일 의 종속성에서 SDK 패키지 제거합니다.

에이전트 배포한 후 에이전트의 성능과 활동을 모니터 할 수 있습니다. 에이전트 모니터 하는 방법을 학습 모니터 가이드 참조하세요.