다크 모드
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:organizationESC 환경 로드
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-prodPulumi 실행
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가 있으며, 다음을 관리합니다.
- Docker 이미지 빌드 → ECR 푸시
- 새 Task Definition 생성 → ECS 서비스 업데이트
- 서비스별 인프라 (
/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 결과 코멘트