diff --git a/.github/workflows/gradle-prod.yml b/.github/workflows/gradle-prod.yml new file mode 100644 index 0000000..7fad33c --- /dev/null +++ b/.github/workflows/gradle-prod.yml @@ -0,0 +1,116 @@ +name: Java CI with Gradle - Product + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +env: + AWS_REGION: ap-northeast-2 + S3_BUCKET_NAME: s3-ttubeog + CODE_DEPLOY_APPLICATION_NAME: ttubeog-codedeploy + CODE_DEPLOY_DEPLOYMENT_GROUP_NAME: ttubeog-deploy-group + + +permissions: + contents: read + +jobs: + build: + name: Build + runs-on: ubuntu-22.04 + + steps: + # 작업 엑세스 가능하게 $GITHUB_WORKSPACE에서 저장소를 체크아웃 + - name: Checkout branch + uses: actions/checkout@v3 + + # java 버전 세팅 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'zulu' + + # git ignore한 yml 파일들 github secret에서 복사해 오기 + - name: Copy secret + env: + OCCUPY_SECRET: ${{ secrets.OCCUPY_SECRET_PROD }} + OCCUPY_LOGBACK_SECRET: ${{ secrets.OCCUPY_LOGBACK_SECRET }} + + OCCUPY_SECRET_DIR: ./src/main/resources + OCCUPY_LOGBACK_SECRET_DIR: ./src/main/resources + + OCCUPY_SECRET_DIR_FILE_NAME: application.yml + OCCUPY_LOGBACK_SECRET_DIR_FILE_NAME: logback-test.xml + run: | + touch $OCCUPY_SECRET_DIR/$OCCUPY_SECRET_DIR_FILE_NAME + touch $OCCUPY_LOGBACK_SECRET_DIR/$OCCUPY_LOGBACK_SECRET_DIR_FILE_NAME + + echo "$OCCUPY_SECRET" > $OCCUPY_SECRET_DIR/$OCCUPY_SECRET_DIR_FILE_NAME + echo "$OCCUPY_LOGBACK_SECRET" > $OCCUPY_LOGBACK_SECRET_DIR/$OCCUPY_LOGBACK_SECRET_DIR_FILE_NAME + + # gradlew 실행 권한 부여 + - name: Run chmod to make gradlew executable + run: chmod +x ./gradlew + shell: bash + + # Build -> jar 파일 생성 + - name: Build with Gradle + run: ./gradlew clean build -x test + shell: bash + + - name: Upload Build artifacts + uses: actions/upload-artifact@v2 + with: + name: build-artifacts + path: | + build/libs/*.jar + + - name: Start redis-server + uses: appleboy/scp-action@master + with: + key: ${{ secrets.EC2_KEY_PROD }} + host: ${{ secrets.EC2_HOST_PROD }} + username: ${{ secrets.EC2_USER_PROD }} + target: /home/ubuntu/app/spring_source + source: . + command: sudo systemctl start redis-server + + + + + deploy: + name: CD with SSH + needs: build + runs-on: ubuntu-22.04 + + steps: + - name: Download build artifacts + uses: actions/download-artifact@v2 + with: + name: build-artifacts + + # JAR 파일을 EC2에 배포하는 step + - name: SCP JAR to EC2 + uses: appleboy/scp-action@master + with: + key: ${{ secrets.EC2_KEY_PROD }} + host: ${{ secrets.EC2_HOST_PROD }} + username: ${{ secrets.EC2_USER_PROD }} + source: "*.jar" + target: "/home/ubuntu/app" + + # EC2에 SSH로 배포 커맨드를 입력하는 step + - name: Deploy SSH + uses: appleboy/ssh-action@master + with: + key: ${{ secrets.EC2_KEY_PROD }} + host: ${{ secrets.EC2_HOST_PROD }} + username: ${{ secrets.EC2_USER_PROD }} + # 기존 실행 중인 서버 종료 후 jar 파일 실행 + script: | + sudo fuser -k -n tcp 8080 + sleep 15 + sudo nohup java -jar /home/ubuntu/app/*.jar > ./nohup.out 2>&1 &