본문 바로가기

개발일지/AWS

CICD - Github Action

Github repo

-> Add file -> Create new file -> .github.workflows 는 필수

파일 작성

name: CI-CD

on:
  push:
    branches:
      - main

env:
  S3_BUCKET_NAME: s3-anabada-deploy
  CODE_DEPLOY_APPLICATION_NAME: CODE-DEPLOY-ANABADA
  CODE_DEPLOY_DEPLOYMENT_GROUP_NAME: CODE-DEPLOY-GROUP

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Set up JDK 17
        uses: actions/setup-java@v1
        with:
          java-version: 17

      - run: touch ./src/main/resources/application.yaml
      - run: echo "${{ secrets.APPLICATION }}" > ./src/main/resources/application.yaml
      - run: cat ./src/main/resources/application.yaml

      - name: Grant execute permission for gradlew
        run: chmod +x ./gradlew
        shell: bash

      - name: Build with Gradle
        run: ./gradlew build
        shell: bash

      - name: Make zip file
        run: zip -r ./$GITHUB_SHA .
        shell: bash

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ${{ secrets.AWS_REGION }}

      - name: Upload to S3
        run: aws s3 cp --region ap-northeast-2 ./$GITHUB_SHA.zip s3://$S3_BUCKET_NAME/$GITHUB_SHA.zip

      - name: Code Deploy
        run: |
          aws deploy create-deployment \
          --deployment-config-name CodeDeployDefault.AllAtOnce \
          --application-name ${{ env.CODE_DEPLOY_APPLICATION_NAME }} \
          --deployment-group-name ${{ env.CODE_DEPLOY_DEPLOYMENT_GROUP_NAME }} \
          --s3-location bucket=$S3_BUCKET_NAME,bundleType=zip,key=$GITHUB_SHA.zip

AppSpec: 애플리케이션 사양 파일(AppSpec file)은 CodeDeploy에서 배포를 관리하는 데 사용하는 YAML형식 또는 JSON형식의 파일

 

local에 git clone -> 인텔리제이에서 프로젝트 열기

-> 프로젝트 run 되는 지 확인 -> ubuntu 서버 접속 -> 재시작

sudo service codedeploy-agent restart

로그(agent가 동작될때마다 로그가 출력됨)

tail -F /var/log/aws/codedeploy-agent/codedeploy-agent.log

프로젝트 commit & push 하고 Active에서 build잘 되는지 확인

 

 

 


Project개발 고도화

인텔리제이 -> scripts 디렉토리 생성 -> 하위에 gh_deploy.sh 파일 생성

#!/bin/bash
PROJECT_NAME="github_action"
JAR_PATH="/home/ubuntu/github_action/build/libs/*.jar"
DEPLOY_PATH=/home/ubuntu/$PROJECT_NAME/
DEPLOY_LOG_PATH="/home/ubuntu/$PROJECT_NAME/deploy.log"
DEPLOY_ERR_LOG_PATH="/home/ubuntu/$PROJECT_NAME/deploy_err.log"
APPLICATION_LOG_PATH="/home/ubuntu/$PROJECT_NAME/application.log"
BUILD_JAR=$(ls $JAR_PATH)
JAR_NAME=$(basename $BUILD_JAR)

echo "===== 배포 시작 : $(date +%c) =====" >> $DEPLOY_LOG_PATH

echo "> build 파일명: $JAR_NAME" >> $DEPLOY_LOG_PATH
echo "> build 파일 복사" >> $DEPLOY_LOG_PATH
cp $BUILD_JAR $DEPLOY_PATH

echo "> 현재 동작중인 어플리케이션 pid 체크" >> $DEPLOY_LOG_PATH
CURRENT_PID=$(pgrep -f $JAR_NAME)

if [ -z $CURRENT_PID ]
then
  echo "> 현재 동작중인 어플리케이션 존재 X" >> $DEPLOY_LOG_PATH
else
  echo "> 현재 동작중인 어플리케이션 존재 O" >> $DEPLOY_LOG_PATH
  echo "> 현재 동작중인 어플리케이션 강제 종료 진행" >> $DEPLOY_LOG_PATH
  echo "> kill -9 $CURRENT_PID" >> $DEPLOY_LOG_PATH
  kill -9 $CURRENT_PID
fi

DEPLOY_JAR=$DEPLOY_PATH$JAR_NAME
echo "> DEPLOY_JAR 배포" >> $DEPLOY_LOG_PATH
nohup java -jar $DEPLOY_JAR >> $APPLICATION_LOG_PATH 2> $DEPLOY_ERR_LOG_PATH &

sleep 3

echo "> 배포 종료 : $(date +%c)" >> $DEPLOY_LOG_PATH

 -> 터미널에서 빌드

./gradlew build

'개발일지 > AWS' 카테고리의 다른 글

CICD - CodeDeploy  (0) 2023.07.24
CICD - S3 설정  (0) 2023.07.24
CICD - EC2 설정  (0) 2023.07.24
[윈도우] ec2배포 후 종료하기  (0) 2023.07.24
[윈도우] EC2에 Spring, Database 연동하여 배포하기(2)  (0) 2023.07.24