1- # github repository actions 페이지에 나타날 이름
2- name : CI/CD using Github Actions & AWS CodeDeploy
1+ name : MarkSphere CI/CD (ARM64)
32
4- # event trigger
5- # main 브랜치에 push가 되었을 때 실행
63on :
74 push :
8- branches : [ "main", "test" ]
5+ branches : [ "main" ] # 메인 브랜치에 푸시될 때 실행
96
10- permissions :
11- contents : read
7+ env :
8+ REGISTRY : ghcr.io
9+ IMAGE_NAME : ${{ github.repository }}
1210
1311jobs :
14- build :
12+ build-and-push :
1513 runs-on : ubuntu-latest
14+ permissions :
15+ contents : read
16+ packages : write
1617
1718 steps :
18- # JDK setting - github actions에서 사용할 JDK 설정
19- - uses : actions/checkout@v3
20- - name : Set up JDK 17
21- uses : actions/setup-java@v3
22- with :
23- java-version : ' 17'
24- distribution : ' temurin'
19+ - name : Checkout repository
20+ uses : actions/checkout@v4
2521
26- # gradle caching - 빌드 시간 향상
27- - name : Gradle Caching
28- uses : actions/cache@v3
29- with :
30- path : |
31- ~/.gradle/caches
32- ~/.gradle/wrapper
33- key : ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
34- restore-keys : |
35- ${{ runner.os }}-gradle-
22+ # 1. ARM64 빌드를 위한 에뮬레이터 설정 (핵심!)
23+ - name : Set up QEMU
24+ uses : docker/setup-qemu-action@v3
3625
37- # gradle build
38- - name : Build with Gradle
39- run : |
40- chmod +x ./gradlew
41- ./gradlew build -x test
26+ # 2. Docker Buildx 설정 (멀티 플랫폼 빌드 도구)
27+ - name : Set up Docker Buildx
28+ uses : docker/setup-buildx-action@v3
4229
43- # make zip file
44- - name : Make zip file
45- run : zip -qq -r ./$GITHUB_SHA.zip .
46- shell : bash
30+ # 3. GitHub Container Registry 로그인
31+ - name : Log in to the Container registry
32+ uses : docker/login-action@v3
33+ with :
34+ registry : ${{ env.REGISTRY }}
35+ username : ${{ github.actor }}
36+ password : ${{ secrets.GHCR_TOKEN }}
4737
48- # AWS 사용자 정보 입력
49- - name : Configure AWS credentials
50- uses : aws-actions/configure-aws-credentials@v1
38+ # 4. 이미지 빌드 및 푸시 (ARM64 전용)
39+ - name : Build and push Docker image
40+ uses : docker/build-push-action@v5
5141 with :
52- aws-access-key-id : ${{ secrets.ACCESS_KEY_ID }}
53- aws-secret-access-key : ${{ secrets.ACCESS_KEY_SECRET }}
54- aws-region : ap-northeast-2
42+ context : .
43+ platforms : linux/arm64 # OCI Ampere A1 아키텍처에 맞춤
44+ push : true
45+ tags : ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
46+ cache-from : type=gha
47+ cache-to : type=gha,mode=max
5548
56- # S3에 zip 파일 업로드
57- - name : Upload to S3
58- run : aws s3 cp --region ap-northeast-2 ./$GITHUB_SHA.zip s3://${{ secrets.S3_BUCKET_NAME }}/deploy/$GITHUB_SHA.zip --source .
49+ deploy :
50+ needs : build-and-push
51+ runs-on : ubuntu-latest
5952
60- # CodeDeploy에 배포 요청
61- - name : Code Deploy
62- run : aws deploy create-deployment --application-name ${{ secrets.CODE_DEPLOY_APP_NAME }}
63- --deployment-config-name CodeDeployDefault.OneAtATime
64- --deployment-group-name ${{ secrets.CODE_DEPLOY_DEPLOYMENT_GROUP_NAME }}
65- --s3-location bucket=${{ secrets.S3_BUCKET_NAME }},bundleType=zip,key=deploy/$GITHUB_SHA.zip
53+ steps :
54+ # 5. OCI 서버에 SSH로 접속하여 배포 명령 전달
55+ - name : Deploy to OCI
56+ uses : appleboy/ssh-action@v1.0.3
57+ with :
58+ host : ${{ secrets.OCI_HOST }}
59+ username : ${{ secrets.OCI_USERNAME }}
60+ key : ${{ secrets.OCI_KEY }}
61+ script : |
62+ cd ~/marksphere-project # 프로젝트 폴더 경로로 이동
63+
64+ # 새 이미지 가져오기
65+ docker-compose pull
66+
67+ # 컨테이너 재시작 (변경사항 반영)
68+ docker-compose up -d --force-recreate
69+
70+ # 사용하지 않는 오래된 이미지 정리 (용량 관리)
71+ docker image prune -f
0 commit comments