1+ name : CI/CD - Searchweb (version.txt 기반)
2+
3+ on :
4+ push :
5+ branches : [ "main", "dev" ]
6+ pull_request :
7+ branches : [ "main", "dev" ]
8+
9+ jobs :
10+ build-and-push :
11+ name : Build & Push Docker Image
12+ runs-on : ubuntu-latest
13+
14+ outputs :
15+ image_tag : ${{ steps.meta.outputs.IMAGE_TAG }}
16+
17+ steps :
18+ - name : Checkout repository
19+ uses : actions/checkout@v4
20+
21+ - name : Read version.txt
22+ id : meta
23+ run : |
24+ VERSION=$(cat version.txt | tr -d ' \n')
25+ echo "IMAGE_TAG=${VERSION}" >> $GITHUB_OUTPUT
26+
27+ - name : Set up JDK 17
28+ uses : actions/setup-java@v4
29+ with :
30+ distribution : ' temurin'
31+ java-version : ' 17'
32+
33+ - name : Grant execute permission
34+ run : chmod +x ./gradlew
35+
36+ - name : Build JAR
37+ run : ./gradlew clean bootJar
38+
39+ - name : Docker Login
40+ uses : docker/login-action@v3
41+ with :
42+ username : ${{ secrets.DOCKERHUB_USERNAME }}
43+ password : ${{ secrets.DOCKERHUB_TOKEN }}
44+
45+ - name : Docker Build (version + latest)
46+ run : |
47+ docker build \
48+ -t ${{ secrets.DOCKERHUB_USERNAME }}/searchweb:${{ steps.meta.outputs.IMAGE_TAG }} \
49+ -t ${{ secrets.DOCKERHUB_USERNAME }}/searchweb:latest \
50+ .
51+
52+ - name : Docker Push
53+ run : |
54+ docker push ${{ secrets.DOCKERHUB_USERNAME }}/searchweb:${{ steps.meta.outputs.IMAGE_TAG }}
55+ docker push ${{ secrets.DOCKERHUB_USERNAME }}/searchweb:latest
56+
57+ deploy :
58+ name : Deploy to OCI
59+ runs-on : ubuntu-latest
60+ needs : build-and-push
61+
62+ env :
63+ IMAGE_TAG : ${{ needs.build-and-push.outputs.image_tag }}
64+
65+ steps :
66+ - name : Prepare SSH key
67+ run : |
68+ mkdir -p ~/.ssh
69+ echo "${{ secrets.SSH_KEY }}" > ~/.ssh/id_rsa
70+ chmod 600 ~/.ssh/id_rsa
71+
72+ - name : Add Known Hosts
73+ run : ssh-keyscan -H ${{ secrets.SSH_HOST }} >> ~/.ssh/known_hosts
74+
75+ - name : Deploy via SSH
76+ run : |
77+ ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'EOF'
78+ docker login -u '${{ secrets.DOCKERHUB_USERNAME }}' -p '${{ secrets.DOCKERHUB_TOKEN }}'
79+ docker pull ${{ secrets.DOCKERHUB_USERNAME }}/searchweb:${IMAGE_TAG}
80+ docker pull ${{ secrets.DOCKERHUB_USERNAME }}/searchweb:latest
81+
82+ # 기존 컨테이너 강제 삭제 (있으면 지우고, 없으면 에러 무시)
83+ docker rm -f searchweb 2>/dev/null || true
84+
85+ # 새 컨테이너 실행
86+ docker run -d \
87+ --env SPRING_PROFILES_ACTIVE=dev \
88+ --env-file /home/ubuntu/Searchweb/.env \
89+ -p 8080:8080 \
90+ --name searchweb \
91+ ${{ secrets.DOCKERHUB_USERNAME }}/searchweb:latest
92+ EOF
0 commit comments