📝오늘 공부한 것
- 미니프로젝트 - ANABADA 사이트 만들기
- CICD - spring S3 + CodeDeploy + Github Actions 로 배포하기
알게 된 점❗
IAM값 선언
IAM -> 역할 -> 역할 만들기 -> CodeDeploy 검색 & 선택
이름 작성 -> 생성
CodeDeploy
어플리케이션 -> 어플리케이션 생성 -> 이름 & 플랫폼 작성 및 선택
-> 배포 그룹 생성
그룹 이름 입력 -> 역할 선택(이전에 생성했던 역할) -> 현재 위치
EC2인스턴스 -> ec2생성 시 생긴 태그 값 선택
-> 로드 밸런서 비활성화(과금 될 수 있음)
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
'TIL(Today I Learned)' 카테고리의 다른 글
TIL-230720(항해99 미니 프로젝트-ANABADA 마무리) (0) | 2023.07.21 |
---|---|
TIL-230719(항해99 미니 프로젝트-ANABADA(3)) (0) | 2023.07.20 |
TIL-230717(2)(CICD-AWS S3 설정) (0) | 2023.07.17 |
TIL-230717(CICD-AWS EC2 설정) (0) | 2023.07.17 |
TIL-230715(항해99 미니 프로젝트-ANABADA(2)) (0) | 2023.07.15 |