Skip to content

Commit

Permalink
cd: 파트별 배포 파이프라인 분리
Browse files Browse the repository at this point in the history
rdyjun committed Dec 12, 2024
1 parent bca0848 commit df78ae1
Showing 1 changed file with 47 additions and 22 deletions.
69 changes: 47 additions & 22 deletions .github/workflows/docker-image.yml
Original file line number Diff line number Diff line change
@@ -2,7 +2,7 @@ name: Docker Image CD

on:
push:
branches: ['dev']
branches: [ 'dev' ]

jobs:
build:
@@ -12,6 +12,14 @@ jobs:
# 소스 코드 체크아웃
- name: Checkout code
uses: actions/checkout@v3
with:
fetch-depth: 0

# Docker Compose로 전체 애플리케이션 빌드 및 실행 (테스트용)
- name: Run Docker Compose for testing
run: |
docker compose up --build -d
continue-on-error: false

# Docker Hub 로그인
- name: Log in to Docker Hub
@@ -30,40 +38,57 @@ jobs:
- name: Add known hosts
run: ssh-keyscan -H ${{ secrets.SERVER_IP }} >> ~/.ssh/known_hosts

- name: Check file changes
run: |
echo "CLIENT_FILE_CHANGED=$(git diff --quiet ${{ github.event.before }} HEAD client || echo 'true')" > $GITHUB_ENV
echo "SERVER_FILE_CHANGED=$(git diff --quiet ${{ github.event.before }} HEAD server || echo 'true')" >> $GITHUB_ENV
if [ ! -f "$GITHUB_ENV" ] || [ ! -s "$GITHUB_ENV" ]; then
echo "CLIENT_FILE_CHANGED=true" > $GITHUB_ENV
echo "SERVER_FILE_CHANGED=true" >> $GITHUB_ENV
fi
# 서버 이미지 빌드 및 태그 지정
- name: Build and tag Docker image
run: |
docker build -f server/Dockerfile -t ${{ secrets.DOCKER_USERNAME }}/inear-server:${{ github.sha }} ./
docker tag ${{ secrets.DOCKER_USERNAME }}/inear-server:${{ github.sha }} ${{ secrets.DOCKER_USERNAME }}/inear-server:latest
if [ ${{ env.SERVER_FILE_CHANGED }} == 'true' ]; then
docker build -f server/Dockerfile -t ${{ secrets.DOCKER_USERNAME }}/inear-server:${{ github.sha }} ./
docker tag ${{ secrets.DOCKER_USERNAME }}/inear-server:${{ github.sha }} ${{ secrets.DOCKER_USERNAME }}/inear-server:latest
fi
# 서버 이미지 푸시 (Docker Hub 또는 다른 레지스트리)
- name: Push server image to Docker Hub
run: |
if [ ${{ env.SERVER_FILE_CHANGED }} == 'true' ]; then
docker push ${{ secrets.DOCKER_USERNAME }}/inear-server:${{ github.sha }}
docker push ${{ secrets.DOCKER_USERNAME }}/inear-server:latest
fi
# 클라이언트 및 nginx 이미지 빌드 및 태그 지정
- name: Build and tag client image
run: |
yarn --cwd ./client install
echo ${{ secrets.CLIENT_ENV_PRODUCTION }} > ./client/.env.production
echo ${{ secrets.CLIENT_ENV_DEVELOPMENT }} > ./client/.env.development
yarn --cwd ./client build
scp -r ./client/dist/ ${{ secrets.SSH_USER }}@${{ secrets.SERVER_IP }}:/${{ secrets.SSH_USER }}/web18-inear-test/nginx/html/
# Docker Compose로 전체 애플리케이션 빌드 및 실행 (테스트용)
- name: Run Docker Compose for testing (optional)
run: |
docker compose up --build -d
continue-on-error: false

# 서버 이미지 푸시 (Docker Hub 또는 다른 레지스트리)
- name: Push server image to Docker Hub (optional)
run: |
docker push ${{ secrets.DOCKER_USERNAME }}/inear-server:${{ github.sha }}
docker push ${{ secrets.DOCKER_USERNAME }}/inear-server:latest
if [ ${{ env.CLIENT_FILE_CHANGED }} == 'true' ]; then
yarn --cwd ./client install
echo ${{ secrets.CLIENT_ENV_PRODUCTION }} > ./client/.env.production
echo ${{ secrets.CLIENT_ENV_DEVELOPMENT }} > ./client/.env.development
yarn --cwd ./client build
scp -r ./client/dist/ ${{ secrets.SSH_USER }}@${{ secrets.SERVER_IP }}:/${{ secrets.SSH_USER }}/web18-inear-test/nginx/html/
fi
# 서버에서 파일을 최신화 하고, 배포 스크립트를 통해 실제 배포 진행
- name: Deploy with Docker Compose on server
run: |
ssh ${{ secrets.SSH_USER }}@${{ secrets.SERVER_IP }} " \
SERVER_FILE_CHANGED=${{ env.SERVER_FILE_CHANGED }} && \
CLIENT_FILE_CHANGED=${{ env.CLIENT_FILE_CHANGED }} && \
mkdir -p /${{ secrets.SSH_USER }}/web18-inear-test && \
cd /${{ secrets.SSH_USER }}/web18-inear-test && \
docker system prune -af && \
docker pull ${{ secrets.DOCKER_USERNAME }}/inear-server:latest && \
./deploy.sh
if [ $SERVER_FILE_CHANGED == true ]; then
docker pull ${{ secrets.DOCKER_USERNAME }}/inear-server:latest && \
./backend-deploy.sh
fi
if [ $CLIENT_FILE_CHANGED == true ]; then
./frontend-deploy.sh
fi
"

0 comments on commit df78ae1

Please sign in to comment.