코딩과 결혼합니다

231025 - [Game_Crew]트러블슈팅 : 자동 배포 환경 구축 본문

코딩과 매일매일♥/Game_Crew

231025 - [Game_Crew]트러블슈팅 : 자동 배포 환경 구축

코딩러버 2023. 10. 25. 11:04
728x90

.github/workflows/main.yml 파일 만들기

name: Build and Deploy Spring Boot to AWS EC2

on:
  push:
    branches: [ "main" ]

permissions:
  contents: read

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Set up JDK 17
      uses: actions/setup-java@v3
      with:
        java-version: '17'
        distribution: 'temurin'
        
    - uses: actions/checkout@v3
    - run: touch ./src/main/resources/application.properties
    - run: echo ${{ secrets.APPLICATION }} > ./src/main/resources/application.properties
    - run: cat ./src/main/resources/application.properties

    - name: Grant execute permission to gradlew
      run: chmod +x ./gradlew

    - name: Build with Gradle
      uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
      with:
        arguments: build

    - name: Deploy Prod use SCP
      uses: appleboy/scp-action@master
      with:
        username: ubuntu
        host: ${{ secrets.HOST }}
        key: ${{ secrets.PASSWORD }}
        source: "./build/libs/*.jar"
        target: "/home/ubuntu/deploy"
        strip_components: 2
        
    - name: Transfer Deploy Script use SCP
      uses: appleboy/scp-action@master
      with:
          username: ubuntu
          host: ${{ secrets.HOST }}
          key: ${{ secrets.PASSWORD }}
          source: "deploy.sh"
          target: "/home/ubuntu/deploy"

    - name: Execute Server Init Script
      uses: appleboy/ssh-action@master
      with:
          username: ubuntu
          host: ${{ secrets.HOST }}
          key: ${{ secrets.PASSWORD }}
          script_stop: true
          script: chmod +x /home/ubuntu/deploy/deploy.sh && sh /home/ubuntu/deploy/deploy.sh

/deploy.sh 파일 만들기

loy

#!/bin/bash
 echo "> now ing app pid find!"
 CURRENT_PID=$(pgrep -f jar)
 echo "$CURRENT_PID"
 if [ -z $CURRENT_PID ]; then
         echo "> no ing app."
 else
         echo "> kill -9 $CURRENT_PID"
         kill -9 $CURRENT_PID
         sleep 3
 fi
 echo "> new app deploy"

 cd /home/ubuntu/deploy
 JAR_NAME=$(ls | grep 'jar' | tail -n 1)
 echo "> JAR Name: $JAR_NAME"
 
 # 현재 폴더에 nohup폴더 만들기 -p는 폴더가 없으면 만들고 있으면 안 만들고
 mkdir -p ./nohup  

 # nohup java -jar -Duser.timezone=Asia/Seoul $JAR_NAME &
 nohup java -jar -Duser.timezone=Asia/Seoul $JAR_NAME 1>nohup/stdout.txt 2>nohup/stderr.txt &

propertise 내용 연결하기

APPLICATION : 프로젝트의 application.propertise 내용
HOST : EC2 주소

NAME  : ubuntu
PASSWORD : .pem 파일을 text파일로 열어서 키 복사 후 붙여 넣기

문제

이유
apllication.properties 파일에 접근할 수 없다.

/main.yml 파일 코드를 보면
run: echo "${{ secrets.APPLICATION }}" > ./src/main/resources/application.properties
이렇게 ""안에 ${{ secrets.APPLICATION }}"가 들어가 있어서 이거 자체를 문자열로 인식해 버릴 수 있다.


해결

" "를 없애주고, 다음으로 secrets의 apllication.propertise의 내용은 " "안에 넣음으로 text형태로 보내준다. 


알게 된 것

    - uses: actions/checkout@v3
    - run: touch ./src/main/resources/application.properties
    - run: echo ${{ secrets.APPLICATION }} > ./src/main/resources/application.properties
    - run: cat ./src/main/resources/application.properties
  1. uses ~~ : GitHub에서 제공하는 표준 액션 중 하나로, 워크플로우가 실행되는 러너에 GitHub 저장소의 코드를 체크아웃한다. 이렇게 하면 워크플로우가 GitHub저장소의 코드에 액세스 할 수 있게 된다.
  2. touch ~~ : 이 명령은 파일을 생성하는 데 사용된다.
    [ ./src/main/resources/디렉터리에application.properties라는 이름의 파일을 생성 ] 
  3. echo ~~ : 표준 출력에 텍스트를 출력하는 데 사용된다. secrets.APPLICATION은 GitHub Secrets에서 암호화된 APPLICATION 값이고, 이 행은 APPLICATION 시크릿 값을 application.properties 파일에 쓰는 작업을 수행한다.
  4. cat ~~ : 파일의 내용을 출력하는 데 사용된다.

문제
빌드는 잘 되었으나 EC2로 api테스트를 했을 때 오류가 남


이유

  1. ubuntu 환경에 java가 깔려있지 않음
  2. AWS EC2의 인바운드 규칙에서 8080 포트를 설정해주지 않음

해결

https://coding-s2-chaewon.tistory.com/137
이전에 겪어봤던 문제로 팀원과 함께 해결.

더하여 서버가 잘 돌아가는지, 오류가 났을 때는 어떻게 확인하는지 등을 알려주었다.

 

230807 - GithubAction으로 CI/CD 오류 해결과 RDS 연결

문제(의 시작) 왠지 빨리 성공한다 했다. 내 파일이 EC2에서 잘 돌아가고 있어야 하는데 git bash를 끄려고 하면 Processes are runnung in session: WPID PID COMMAND 10660 1128 ssh -i LivingInSeoul.pem ub Close anyway? 이런

coding-s2-chaewon.tistory.com


+ 포스트맨으로 EC2의 IP:8080을 넣어서 테스트해보니 잘 된다.