Update gradle.yml #32
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 | |
| - 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: clean | |
| 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.CONTAINER_NAME }} || true | |
| docker rm ${{ secrets.CONTAINER_NAME }} || true | |
| # 기존 이미지 정리 | |
| docker rmi ${{ secrets.IMAGE_NAME }} || true | |
| - 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: | | |
| # 이미지 로드 | |
| 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 run --env-file ./.env -d -p 8080:8080 ${{ secrets.IMAGE_NAME }} | |
| #정리 | |
| # sudo docker rmi $(sudo docker images -f "dangling=true" -q) --force | |
| rm -f ${GITHUB_SHA}.tar.gz | |
| rm -f ${GITHUB_SHA}.tar | |
| rm -f .env |