Skip to content

CI/CD

개요

truloop 인프라의 CI/CD는 GitHub Actions로 자동화되어 있습니다. PR 생성 시 변경사항을 미리보기하고, main 브랜치에 머지되면 순차적으로 Dev → Prod에 배포합니다.

워크플로우 구성

워크플로우 파일: .github/workflows/pulumi.yml

트리거 조건

이벤트조건실행 작업
Pull Request*.ts, Pulumi*.yaml, package*.json 변경 시Preview (Dev + Prod)
Push to main동일 파일 변경 시Deploy Dev → Deploy Prod

파이프라인 흐름

인증 방식

OIDC 인증 (Passwordless)

CI/CD 파이프라인은 Pulumi ESC OIDC를 통해 AWS 자격증명을 획득합니다. GitHub Secrets에 AWS 키를 저장할 필요가 없습니다.

Pulumi Cloud 인증

pulumi/auth-actions@v1을 사용하여 Pulumi Cloud(butbeautiful 조직)에 OIDC로 인증합니다.

yaml
- name: Authenticate with Pulumi Cloud
  uses: pulumi/auth-actions@v1
  with:
    organization: butbeautiful
    requested-token-type: urn:pulumi:token-type:access_token:organization

ESC 환경 로드

pulumi/esc-action@v1으로 ESC 환경을 로드합니다. ESC 환경이 AWS OIDC Role을 assume하여 AWS 자격증명을 환경변수로 제공합니다.

yaml
- name: Load ESC Environment
  uses: pulumi/esc-action@v1
  with:
    environment: truloop/infra-dev  # 또는 truloop/infra-prod

Pulumi 실행

AWS 자격증명이 환경변수에 설정된 상태에서 Pulumi 명령을 실행합니다.

yaml
- uses: pulumi/actions@v6
  with:
    command: preview  # 또는 up
    stack-name: butbeautiful/truloop-infra/dev

인증 흐름

Job 상세

Preview (PR 생성 시)

Dev와 Prod 스택에 대해 병렬로 pulumi preview를 실행하고, 결과를 PR 코멘트로 게시합니다.

yaml
strategy:
  matrix:
    stack: [dev, prod]
    include:
      - stack: dev
        esc-env: truloop/infra-dev
      - stack: prod
        esc-env: truloop/infra-prod

정보

comment-on-pr: true 옵션으로 PR에 변경 예상 결과가 자동으로 코멘트됩니다. 리뷰어가 인프라 변경을 코드 리뷰 중에 확인할 수 있습니다.

Deploy Dev (main 머지 시)

  • Environment: development (GitHub Environment)
  • 명령: pulumi up
  • 스택: butbeautiful/truloop-infra/dev

Deploy Prod (Dev 성공 후)

  • Environment: production (GitHub Environment)
  • 명령: pulumi up
  • 스택: butbeautiful/truloop-infra/prod
  • 전제조건: deploy-dev 완료

주의

Prod 배포는 Dev 배포가 성공한 후에만 실행됩니다 (needs: deploy-dev). GitHub Environment의 보호 규칙으로 추가적인 승인을 요구할 수 있습니다.

서비스별 CI/CD

각 서비스 레포(truloop-core, truloop-assistant 등)에도 별도의 CI/CD가 있으며, 다음을 관리합니다.

  1. Docker 이미지 빌드 → ECR 푸시
  2. 새 Task Definition 생성 → ECS 서비스 업데이트
  3. 서비스별 인프라 (/infra 폴더) → Pulumi로 Target Group, Listener Rule 등 관리

정보

서비스별 CI/CD도 동일하게 Pulumi ESC를 통해 AWS 자격증명을 획득합니다. 별도의 GitHub Secrets 설정이 필요하지 않습니다.

필요한 GitHub 권한

워크플로우에 설정된 Permission:

yaml
permissions:
  contents: read       # 코드 체크아웃
  id-token: write      # OIDC 인증
  pull-requests: write # Preview 결과 코멘트