우주먼지
article thumbnail

1. 💡 Github Actions

 

1.1. 동작 과정

  • Github Repository 변화 감지 (push 트리거 등)
  • Github Actions 작동
  • Github Actions에서 빌드 결과물 생성
  • S3로 전송 & 저장
  • Github Actions에서 AWS CodeDeploy에 배포 명령
  • CodeDeploy가 EC2에 Deploy & Run

2. 💡 배포

준비사항

1. Github Actions 생성
2. S3 버킷 & 정적 웹 호스팅 비활성화 & Public Access 차단 해제

3. AWS Code Deploy
4. EC2

 

2.1. Github Actions 생성 & 설정

  • java with gradle -> start commit
  • repo -> settings - secrets/actions -> new repository secret
  • AWS_ACCESS_KEY, AWS_SECRET_ACCESS_KEY 등록

키 추가 완료


2.2. gradle.yml 수정 

  • Build with Gradle 부분을 설정하여 직접 빌드 방식으로 빌드 진행
<bash />
name: Java CI with Gradle on: push: branches: [ "main" ] permissions: contents: read env: S3_BUCKET_NAME: deploy011-bucket-replicaset jobs: build: runs-on: centos steps: - uses: actions/checkout@v3 - name: Set up JDK 11 uses: actions/setup-java@v3 with: java-version: '11' distribution: 'temurin' - name: Build with Gradle run: ./gradlew build # - name: Build with Gradle # uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1 # with: # arguments: build # build한 후 프로젝트를 압축합니다. - name: Make zip file run: zip -r ./main.zip . shell: bash # Access Key와 Secret Access Key를 통해 권한을 확인합니다. # 아래 코드에 Access Key와 Secret Key를 직접 작성하지 않습니다. - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }} # 등록한 Github Secret이 자동으로 불려옵니다. aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} # 등록한 Github Secret이 자동으로 불려옵니다. aws-region: ap-northeast-2 # 압축한 프로젝트를 S3로 전송합니다. - name: Upload to S3 run: aws s3 cp --region ap-northeast-2 ./main.zip s3://$S3_BUCKET_NAME/main.zip

 

CI 성공
S3로 빌드 결과물 자동 전송 완료


2.3. AWS CodeDeploy & 배포그룹 생성

 

CodeDeploy (인스턴스 내에 CodeDeploy-Agent 설치가 되어있어야함)

  • 어플리케이션 - 생성 - 배포그룹 생성
  • IAM & Instance Tag 지정, LoadBalancer 비활성화

어플리케이션 & 배포그룹 생성


2.4. gradle.yml & appspec.yml & deploy.sh 작성

<bash />
# gradle.yml에 추가 # CodeDeploy에게 배포 명령을 내립니다. - name: Code Deploy run: > aws deploy create-deployment --application-name main --deployment-config-name CodeDeployDefault.AllAtOnce --deployment-group-name main-group --s3-location bucket=$S3_BUCKET_NAME,bundleType=zip,key=main.zip

 

<bash />
# appspec.yml version: 0.0 os: linux files: - source: / destination: /root overwrite: yes permissions: - object: / pattern: "**" owner: root group: root hooks: ApplicationStart: - location: scripts/deploy.sh timeout: 60 runas: root

 

<bash />
#!/bin/bash # deploy.sh BUILD_JAR=$(ls /root/main/build/libs/main1-0.0.1-SNAPSHOT.jar) JAR_NAME=$(basename $BUILD_JAR) echo "> 현재 시간: $(date)" >> /root/main/deploy.log echo "> build 파일명: $JAR_NAME" >> /root/main/deploy.log echo "> build 파일 복사" >> /root/main/deploy.log DEPLOY_PATH=/root/seb41_main_011 cp $BUILD_JAR $DEPLOY_PATH echo "> 현재 실행중인 애플리케이션 pid 확인" >> /root/main/deploy.log CURRENT_PID=$(pgrep -f $JAR_NAME) if [ -z $CURRENT_PID ] then echo "> 현재 구동중인 애플리케이션이 없으므로 종료하지 않습니다." >> /root/main/deploy.log else echo "> kill -9 $CURRENT_PID" >> /root/main/deploy.log sudo kill -9 $CURRENT_PID sleep 5 fi DEPLOY_JAR=$DEPLOY_PATH$JAR_NAME echo "> DEPLOY_JAR 배포" >> /root/main/deploy.log sudo nohup java -jar $DEPLOY_JAR >> /root/main/deploy.log 2>/root/main/deploy_err.log &

2.5. EC2 인스턴스 생성 (Elastic IP 설정)


2.6. 보안그룹 포트 오픈

  • 3306 - DB Connection Endpoint
  • 3000 - React Connection Endpoint 1
  • 3001 - React Connection Endpoint 2
  • 8080 - Spring Boot Endpoint
  • 22 - SSH Endpoint
  • 6379 - RDS Endpoint
  • 5000 - Docker Private Registry Endpoint


2.7. Github SSH Key 등록


2.8. EC2 내부 패키지 설치

 

2.8.1. JDK 설치

  • amazon-linux-extra install -y openjdk11

 

2.8.2. GIT 설치

  • yum -y install git

 

2.8.3. AWS CLI 설치


2.8.4. CodeDeploy Agent 설치

  • yum -y update
  • yum -y install gcc (C Compiler)
  • gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
  • curl -sSL https://rvm.io/pkuczynski.asc | gpg2 --import -   -> import gpg key 
  • curl -sSL https://get.rvm.io | bash -s stable  (rvm 설치 스크립트)
  • source /etc/profile.d/rvm.sh  (시스템 환경변수 & rvm 정보 업데이트)
  • rvm reload
  • rvm requirements run  (rvm 의존성 패키지 설치)
  • rvm list known
  • rvm install [version] (2.7)
  • rvm list
  • rvm use [version] --default
  • ruby -v
  • gem install aws-sdk  (Ruby용 sdk 설치)
  • wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
  • chmod +x install
  • ./install auto > /tmp/logfile
  • service codedeploy-agent status

Code Deploy Agent 설치


2.9. IAM Role 생성

  • AmazonS3FullAccess
  • AmazonEC2RoleforAWSCodeDeploy
  • AWSCodeDeployRole
  • AmazonSSMFullAccess
  • AmazonEC2FullAccess
  • IAM Role 과 IAM UserGroup의 태그 연결하기

 

추가한 정책 목록

 

신뢰정책에 내 리전의 codedeploy 서비스 추가

 

EC2에 IAM Role 연결

 

'Management & Tool > Git' 카테고리의 다른 글

Git Flow  (0) 2022.12.15
Git Project 칸반보드  (0) 2022.12.15
Git Branch  (0) 2022.12.15
Git  (0) 2022.08.26
profile

우주먼지

@o귤o

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그