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로 볼륨까지 정리하여 다음 실행에 영향을 주지 않습니다.