1- name : CI/CD using github actions & docker
1+ name : CI/CD using GitHub Actions & Docker
22
3- # event trigger
43on :
54 push :
65 branches :
@@ -11,19 +10,22 @@ permissions:
1110
1211jobs :
1312 build :
14-
1513 runs-on : ubuntu-latest
14+
1615 steps :
17- # open jdk 17 버전 환경을 세팅
18- - uses : actions/checkout@v3
16+ - name : Checkout repository with submodules
17+ uses : actions/checkout@v4
18+ with :
19+ token : ${{ secrets.CONFIG_TOKEN }}
20+ submodules : true
21+
1922 - name : Set up JDK 17
2023 uses : actions/setup-java@v3
2124 with :
2225 java-version : " 17"
2326 distribution : " temurin"
2427
25- # gradle caching - 빌드 시간 향상
26- - name : Gradle Caching
28+ - name : Gradle caching
2729 uses : actions/cache@v3
2830 with :
2931 path : |
@@ -33,85 +35,41 @@ jobs:
3335 restore-keys : |
3436 ${{ runner.os }}-gradle-
3537
36- # Set up Gradle
3738 - name : Setup Gradle
3839 uses : gradle/gradle-build-action@v2
3940
40- # Github Submodule에서 환경변수 가져오기
41- - name : Checkout repo
42- uses : actions/checkout@v4
43- with :
44- token : ${{secrets.CONFIG_TOKEN}}
45- submodules : true
46-
47- # 서브모듈 업데이트 (초기화)
48- - name : Update Git Submodules
49- run : |
50- git submodule update --init --recursive
51- ls -al Server-v2.0-Config/yml
52-
53- # Gradle 빌드 전에, application.yml 존재 여부 확인
54- - name : Check application.yml exists
55- run : |
56- if [ -f "Server-v2.0-Config/yml/application.yml" ]; then
57- echo "application.yml exists"
58- else
59- echo "application.yml NOT FOUND"
60- exit 1
61- fi
62-
63- # 프로젝트 메타정보 추출해서 Docker image에 태그 생성
64- - name : Extract metadata (tags, labels) for Docker
65- id : meta
66- uses : docker/metadata-action@v5
67- with :
68- images : ${{secrets.DOCKER_USERNAME}}/daily-pay
69- # 가장 최신 image 에 latest tag 달기
70- flavor : |
71- latest=true
72- # Git short commit, use git version tag
73- tags : |
74- type=semver,pattern={{version}}
75-
76- # gradle build
7741 - name : Build with Gradle
7842 run : |
7943 chmod +x ./gradlew
8044 ./gradlew clean build -x test
8145
82- # DockerHub 로그인
8346 - name : Login to Docker Hub
8447 uses : docker/login-action@v3
8548 with :
86- username : ${{secrets.DOCKER_USERNAME}}
87- password : ${{secrets.DOCKER_PASSWORD}}
49+ username : ${{ secrets.DOCKER_USERNAME }}
50+ password : ${{ secrets.DOCKER_PASSWORD }}
8851
89- # Docker image Build해서 DockerHub에 Push
9052 - name : Docker build and push
9153 run : |
9254 docker build -t ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPO }} .
9355 docker push ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPO }}
9456
95- # EC2 서버에 배포
96- - name : Deploy to prod
57+ - name : Deploy to EC2
9758 uses : appleboy/ssh-action@master
98- id : deploy-prod
9959 with :
100- host : ${{ secrets.SSH_KNOWN_HOSTS }}
60+ host : ${{ secrets.SSH_HOST }}
10161 username : ${{ secrets.SSH_USER }}
102- key : ${{ secrets.SSH_PEM_KEY }}
62+ key : ${{ secrets.SSH_PRIVATE_KEY }}
10363 script : |
104- echo "Stopping and removing existing Docker containers ..."
105- sudo docker stop $(sudo docker ps -aq) || echo "No running containers "
106- sudo docker rm -f $(sudo docker ps -aq) || echo "No containers to remove"
64+ echo "Stopping existing container ..."
65+ sudo docker stop ai-tutor-app || echo "No running container to stop "
66+ sudo docker rm ai-tutor-app || echo "No container to remove"
10767
108- echo "Pulling the latest Docker image..."
68+ echo "Pulling latest Docker image..."
10969 sudo docker pull ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPO }}:latest
11070
11171 echo "Starting new Docker container..."
11272 sudo docker run -d -p 80:8080 --restart always --name ai-tutor-app ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPO }}:latest
11373
11474 echo "Cleaning up unused Docker images..."
11575 sudo docker image prune -f || echo "No images to prune"
116-
117-
0 commit comments