diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml new file mode 100644 index 0000000..3c6252c --- /dev/null +++ b/.github/workflows/cd.yml @@ -0,0 +1,64 @@ +name: Backend CD # actions 이름 + +on: + push: + branches: [ main ] + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Set up JDK 21 + uses: actions/setup-java@v3 + with: + java-version: 21 + distribution: 'adopt' + + - name: 저장소 Checkout + uses: actions/checkout@v3 + + - name: make application-prod yml file + run: | + cd ./api-module/src/main/resources + touch ./application-prod.yml + echo "${{ secrets.APPLICATION_PROD }}" > ./application-prod.yml + shell: bash + + - name: Gradlew 권한 부여 + run: chmod +x ./gradlew + + - name: 스프링부트 애플리케이션 빌드 + run: ./gradlew bootJar + + - name: 도커 이미지 빌드 + run: sudo docker build -t ${{ secrets.DOCKER_IMG }} --platform linux/amd64 . + + - name: 도커 이미지 push + run: | + sudo docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} + sudo docker push ${{ secrets.DOCKER_IMG }} + + - name: scp file + uses: appleboy/scp-action@master + with: + host: ${{ secrets.EC2_SERVER_HOST }} + username: ${{ secrets.EC2_USERNAME }} + key: ${{ secrets.PRIVATE_KEY }} + source: "docker-compose.yml" + target: "/home/ec2-user" + + - name: 배포 + uses: appleboy/ssh-action@v0.1.6 + with: + host: ${{ secrets.EC2_SERVER_HOST }} + username: ${{ secrets.EC2_USERNAME }} + key: ${{ secrets.PRIVATE_KEY }} + port: ${{ secrets.SSH_PORT }} + script: | + touch ./docker-compose.yml + echo "${{ secrets.DOCKER_COMPOSE }}" > ./docker-compose.yml + sudo docker stop $(sudo docker ps -a -q) + sudo docker rm -f $(sudo docker ps -qa) + sudo docker pull ${{ secrets.DOCKER_IMG }} + sudo docker-compose -f docker-compose.yml up -d + sudo docker image prune -f