Merge pull request #35 from sanikani/main #34
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build and Deploy to Docker Hub and EC2 | |
on: | |
push: | |
branches: | |
- develop | |
env: | |
DOCKER_IMAGE_NAME: springboot-app | |
AWS_REGION: ap-northeast-2 | |
RESOURCE_PATH: ./src/main/resources/application.yml | |
permissions: | |
contents: read | |
jobs: | |
build-and-deploy: | |
name: Build and Deploy | |
runs-on: ubuntu-latest | |
environment: production | |
steps: | |
# (1) 기본 체크아웃 | |
- name: Checkout | |
uses: actions/checkout@v4 | |
# (2) JDK 17 세팅 | |
- name: Set up JDK 17 | |
uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: '17' | |
# 환경변수 설정 | |
- name: Set up Environment Variables | |
uses: microsoft/variable-substitution@v1 | |
with: | |
files: ${{ env.RESOURCE_PATH }} | |
env: | |
spring.datasource.url: ${{ secrets.AWS_RDS_ENDPOINT }} | |
spring.datasource.password: ${{ secrets.AWS_RDS_PASSWORD }} | |
cloud.aws.credentials.access-key: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
cloud.aws.credentials.secret-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
cloud.aws.s3.bucket: ${{ secrets.S3_BUCKET_NAME }} | |
# (3) Gradle build (Test 제외) | |
- name: Grant execute permission for gradlew | |
run: chmod +x gradlew | |
- name: Build with Gradle | |
uses: gradle/gradle-build-action@v2 | |
with: | |
arguments: clean build -x test | |
# (4) Docker 로그인 | |
- name: Log in to Docker Hub | |
uses: docker/login-action@v2 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
# (5) Docker 이미지 빌드 및 푸시 | |
- name: Build and push Docker image | |
run: | | |
docker build -t ${{ secrets.DOCKER_USERNAME }}/${{ env.DOCKER_IMAGE_NAME }}:latest . | |
docker push ${{ secrets.DOCKER_USERNAME }}/${{ env.DOCKER_IMAGE_NAME }}:latest | |
# (6) EC2 인스턴스에 SSH 접속하여 Docker 이미지 pull 및 run | |
- name: SSH to EC2 and deploy Docker image | |
uses: appleboy/[email protected] | |
with: | |
host: ${{ secrets.AWS_EC2_DNS }} | |
username: ${{ secrets.EC2_USER }} | |
key: ${{ secrets.EC2_SSH_KEY }} | |
script: | | |
sudo docker pull ${{ secrets.DOCKER_USERNAME }}/${{ env.DOCKER_IMAGE_NAME }}:latest | |
sudo docker stop springboot-app || true | |
sudo docker rm springboot-app || true | |
sudo docker run -d -p 8080:8080 --name springboot-app ${{ secrets.DOCKER_USERNAME }}/${{ env.DOCKER_IMAGE_NAME }}:latest |