Update gradle.yml #29
This file contains hidden or 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
| # This workflow uses actions that are not certified by GitHub. | |
| # They are provided by a third-party and are governed by | |
| # separate terms of service, privacy policy, and support | |
| # documentation. | |
| # This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time | |
| # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle | |
| name: Build and Deploy | |
| on: | |
| push: | |
| branches: [ dev ] | |
| jobs: | |
| build-and-deploy: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Create .env file | |
| run: | | |
| cat <<EOF > .env | |
| DB_URL=${{ secrets.DB_URL }} | |
| DB_USERNAME=${{ secrets.DB_USERNAME }} | |
| DB_PASSWORD=${{ secrets.DB_PASSWORD }} | |
| REDIS_HOST=${{ secrets.REDIS_HOST }} | |
| REDIS_PORT=${{ secrets.REDIS_PORT }} | |
| SMTP_USERNAME=${{ secrets.SMTP_USERNAME }} | |
| SMTP_PASSWORD=${{ secrets.SMTP_PASSWORD }} | |
| SMTP_PORT=${{ secrets.SMTP_PORT }} | |
| JWT_SECRET=${{ secrets.JWT_SECRET }} | |
| CONTAINER_NAME=${{ secrets.CONTAINER_NAME }} | |
| IMAGE_NAME=${{ secrets.IMAGE_NAME }} | |
| EOF | |
| cat .env | |
| - name: Build | |
| run: ./gradlew clean build | |
| - name: Set up Docker | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build Docker image | |
| run: | | |
| docker build -t ${{ secrets.IMAGE_NAME }} . | |
| - name: Save Docker image to archive | |
| run: | | |
| docker save ${{ secrets.IMAGE_NAME }} | gzip > ${GITHUB_SHA}.tar.gz | |
| # GitHub Actions 워크플로우에 추가 | |
| # - name: Copy Dockerfile to EC2 | |
| # uses: appleboy/scp-action@v0.1.7 | |
| # with: | |
| # host: ${{ secrets.EC2_HOST }} | |
| # username: ${{ secrets.EC2_USER }} | |
| # key: ${{ secrets.EC2_SSH_KEY }} | |
| # source: "Dockerfile" | |
| # target: "/home/${{ secrets.EC2_USER }}/" | |
| # - name: Copy docker-compose.yml to EC2 | |
| # uses: appleboy/scp-action@v0.1.7 | |
| # with: | |
| # host: ${{ secrets.EC2_HOST }} | |
| # username: ${{ secrets.EC2_USER }} | |
| # key: ${{ secrets.EC2_SSH_KEY }} | |
| # source: "docker-compose.yml" # 프로젝트 루트의 docker-compose.yml 파일 | |
| # target: "/home/${{ secrets.EC2_USER }}/" | |
| - name: Copy image to EC2 | |
| uses: appleboy/scp-action@v0.1.7 | |
| with: | |
| host: ${{ secrets.EC2_HOST }} | |
| username: ${{ secrets.EC2_USER }} | |
| key: ${{ secrets.EC2_SSH_KEY }} | |
| source: "${{ github.sha }}.tar.gz" | |
| target: "/home/${{ secrets.EC2_USER }}/" | |
| - name: SSH into EC2 and run container | |
| uses: appleboy/ssh-action@v1.0.3 | |
| with: | |
| host: ${{ secrets.EC2_HOST }} | |
| username: ${{ secrets.EC2_USER }} | |
| key: ${{ secrets.EC2_SSH_KEY }} | |
| script: | | |
| # 기존 컨테이너 정리 | |
| docker stop ${{ secrets.APP_NAME }} || true | |
| docker rm ${{ secrets.APP_NAME }} || true | |
| # 이미지 로드 | |
| gunzip -f ${{ github.sha }}.tar.gz | |
| docker load -i ${{ github.sha }}.tar | |
| # .env 파일 생성 (반드시 추가) | |
| cat <<EOF > .env | |
| DB_URL=${{ secrets.DB_URL }} | |
| DB_USERNAME=${{ secrets.DB_USERNAME }} | |
| DB_PASSWORD=${{ secrets.DB_PASSWORD }} | |
| REDIS_HOST=${{ secrets.REDIS_HOST }} | |
| REDIS_PORT=${{ secrets.REDIS_PORT }} | |
| SMTP_USERNAME=${{ secrets.SMTP_USERNAME }} | |
| SMTP_PASSWORD=${{ secrets.SMTP_PASSWORD }} | |
| SMTP_PORT=${{ secrets.SMTP_PORT }} | |
| JWT_SECRET=${{ secrets.JWT_SECRET }} | |
| CONTAINER_NAME=${{ secrets.CONTAINER_NAME }} | |
| IMAGE_NAME=${{ secrets.IMAGE_NAME }} | |
| EOF | |
| # Docker Compose 실행 (로그 출력) | |
| docker run --env-file ./.env -d -p 8080:8080 ${{ secrets.IMAGE_NAME }} | |
| # sudo docker rmi $(sudo docker images -f "dangling=true" -q) --force |