CollabOps

Docker Compose 테스트

Docker Compose로 DB, Redis 등 테스트 환경을 구성하고 통합 테스트 실행

Docker Compose를 사용하여 데이터베이스, 캐시 등 외부 서비스를 구동한 뒤 통합 테스트를 실행하는 예제입니다.

전체 코드

name: compose-integration-test

triggers:
  push:
    branches: [main, develop]
  change_request:
    branches: [main]

jobs:
  integration-test:
    # Docker Compose 사용을 위해 Docker 서비스 선언
    services:
      - docker
    steps:
      # 1. 소스코드 체크아웃
      - name: checkout
        uses: "collabops/checkout@v2"
        with:
          repo-url: "https://<collabops-host>/<workspace>/<repository>.git"

      # 2. 테스트용 서비스 시작 (DB + Redis)
      #    docker compose up -d 로 백그라운드 실행
      - name: start-services
        image: docker:27.5-cli
        run: |
          cd /workspace/source
          docker compose up -d db redis

          # 서비스가 준비될 때까지 대기
          echo "Waiting for services..."
          sleep 5
          docker compose ps

      # 3. 통합 테스트 실행
      - name: run-tests
        image: python:3.12
        run: |
          cd /workspace/source
          pip install -r requirements.txt
          pytest tests/integration/ -v --tb=short
        env:
          DATABASE_URL: "postgresql://test:test@db:5432/testdb"
          REDIS_URL: "redis://redis:6379"

      # 4. 서비스 종료 및 정리
      - name: stop-services
        image: docker:27.5-cli
        run: |
          cd /workspace/source
          docker compose down -v    # 볼륨까지 정리

docker-compose.yml 예시

프로젝트 루트에 다음과 같은 파일이 있다고 가정합니다:

# docker-compose.yml (프로젝트 파일)
services:
  db:
    image: postgres:16
    environment:
      POSTGRES_USER: test
      POSTGRES_PASSWORD: test
      POSTGRES_DB: testdb
    ports:
      - "5432:5432"

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"

포인트

services: [docker]로 Docker 서비스를 활성화하면 docker compose 명령을 사용할 수 있습니다.

테스트 Step에서 서비스 이름(db, redis)을 호스트명으로 사용합니다.

docker compose down -v로 볼륨까지 정리하여 다음 실행에 영향을 주지 않습니다.

목차