회고
🚀 GitHub Actions + Self-Hosted Runner로 MSA 서비스 CI/CD 구축기
창따오
2025. 7. 22. 17:51
728x90
1. 개요
이번 포스팅에서는 MSA 기반 프로젝트에서 각 서비스(Gateway, Auth-Service, User-Service)에 대해 GitHub Actions와 self-hosted runner를 활용해 CI/CD 파이프라인을 구축한 과정을 공유합니다. 집 PC 서버에서 이미지 재배포까지 완전 자동화된 구조를 목표로 설정했습니다.
🛠️ 1. GitHub Actions 기반 CI 구성
✅ Dockerfile 구조 (예: Auth-Service)
FROM amazoncorretto:17
LABEL authors="changhoyoun"
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-Dspring.profiles.active=prod", "-jar", "/app.jar"]
✅ workflow 설정 (.github/workflows/auth-cicd.yml)
name: CI for Auth-Service
on:
push:
branches: [ "main" ]
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'corretto'
- name: Grant execute permission
run: chmod +x ./gradlew
- name: Build with Gradle
run: ./gradlew clean build -x test
- name: Docker Build & Push
run: |
docker build -t changddao/auth-service .
echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login -u changddao --password-stdin
docker push changddao/auth-service
🔄 2. Self-Hosted Runner 기반 CD 구성
✅ Runner 경로 예시
- /home/changddao/changhome/auth-service/actions-runner
✅ .github/workflows/auth-cd.yml
name: CD for Auth-Service
on:
workflow_run:
workflows: ["CI for Auth-Service"]
types:
- completed
jobs:
cd:
runs-on: self-hosted
steps:
- name: Pull latest image
run: docker compose -f ./docker-compose.yml pull app
- name: Restart container
run: docker compose -f ./docker-compose.yml up -d app
📝 docker-compose.yml 예시는 서비스마다 app, gateway, auth-service 등 이름 일치 확인 필요!
🔐 3. 환경 변수 관리 (.env)
CI/CD 파이프라인에서 보안을 고려해 민감한 정보는 .env 파일을 통해 관리합니다.
✅ .env 예시
DB_USERNAME=your_db_user
DB_PASSWORD=your_db_pass
JWT_SECRET_KEY=your_jwt_secret
- .env는 runner가 clone한 디렉토리 기준 docker-compose.yml과 같은 경로에 있어야 주입 가능
- Git에는 절대 커밋 금지
✅ 결론
- 각 서비스는 별도 디렉토리로 관리
- CI는 GitHub Actions에서 자동 빌드 및 Docker Hub push
- CD는 self-hosted runner에서 이미지 pull 및 컨테이너 재기동
- 환경 변수는 .env 파일로 주입