gi_dor

Spring Boot 개인,토이 프로젝트에서 CI/CD 본문

AWS/CI CD

Spring Boot 개인,토이 프로젝트에서 CI/CD

기돌 2024. 6. 18. 20:34

 

private Repository  - 깃허브 계정 , 토큰 복사 붙여넣기 안하기 위해 

git config --global credential.helper store
git pull origin main

// id

// 토큰 pw

이제 그대로 id 와 토큰 값이 저장되어있어 재 입력 하지 않아도된다.


CI/CD 적용

 

 

github actions 라이브러리

https://github.com/marketplace/actions/ssh-remote-commands

 

SSH Remote Commands - GitHub Marketplace

Executing remote ssh commands

github.com

 

# Workflow의 이름
# Workflow : 하나의 yml 파일을 하나의 Workflow라고 부른다.
name: Deploy To EC2

# Event : 실행되는 시점을 설정
# main이라는 브랜치에 push 될 때 아래 Workflow를 실행
on:
  push:
    branches:
      - main

# 하나의 Workflow는 1개 이상의 Job으로 구성된다.
# 여러 Job은 기본적으로 병렬적으로 수행된다.
jobs:
  # Job을 식별하기 위한 id
    Deploy:
      # Github Actions를 실행시킬 서버 종류 선택
      # ubuntu 환경 / 가장최신버전 latest
      runs-on: ubuntu-latest

      # Step : 특정 작업을 수행하는 가장 작은 단위
      # Job은 여러 Step들로 구성되어 있다.
      steps:
        - name : SSH(원격 접속)로 EC2에 접속하기
          uses: appleboy/ssh-action@v1.0.3
          with:
            host: ${{ secrets.EC2_HOST }}
            username: ${{ secrets.EC2_USERNAME }}
            key: ${{ secrets.EC2_PRIVATE_KEY }}
            script_stop: true
            script: |
              cd /home/ubuntu/cicd-server
              git pull origin main
              ./gradlew clean build
              sudo fuser -k -n tcp 8080 || true
              nohup java -jar build/libs/*SNAPSHOT.jar > ./output.log 2>&1 &


EC2_HOST : aws ec2 인스턴스 퍼블릭 ip 주소 
EC2_USERNAME : aws ec2 인스턴스 - 연결 - EC2 인스턴스연결 탭 하단의 사용자 이름
EC2_PRIVATE_KEY : 키페어 파일 :  키페어파일 위치한 폴더에서 git bash  -  명령어 : cat 키페어파일.pem  - 복사  

 

 


  1. 프로젝트 Push 
  2. github 프로젝트 리포지토리 
  3. Actions 탭

 

배포 종료

sudo fuser -k -n tcp 8080

git action timeout으로 연결이 실패 했을 때

10분이 지나도 안되며 멈춰있고 시간만 쌓여갔다

 

https://velog.io/@kwontae1313/github-action-CD%ED%8C%8C%ED%8A%B8-run-time-out

 

github action CD파트 run time out

이전 포스팅에 이어서 이제 정상동작하는 appleboy/ssh-action@master 에 정확한 스크립트를 작성하고, 미리 bash창에가서 pm2로 서버를 켜 둔 후 CD를 진행하였는데..분명 문제가 없을거라 생각했는데 CD

velog.io

https://velog.io/@kwontae1313/AWS-EC2-%EB%A9%94%EB%AA%A8%EB%A6%AC%EC%9A%A9%EB%9F%89-%EC%A6%9D%EC%84%A4

 

AWS EC2 메모리 용량 증설

AWS EC2 인스턴스 프리티어 t2.micro 를 사용한다면, 부족한 메모리용량 때문에 서비스가 중단되는 경우가 있다. 물론 서버에 올려둔 프로젝트의 무게 자체를 줄이는 방법으로 해결할 수도 있지만, E

velog.io

프리티어 EC2 swap 파티션 생성

// 메모리 상태 확인
free -h

// swap 파일을 생성해준다. (메모리 상태 확인 시 swap이 있었지만 디렉토리 파일은 만들어줘야한다.)
sudo mkdir /var/spool/swap
sudo touch /var/spool/swap/swapfile
sudo dd if=/dev/zero of=/var/spool/swap/swapfile count=2048000 bs=1024

// swap 파일을 설정한다.
sudo chmod 600 /var/spool/swap/swapfile
sudo mkswap /var/spool/swap/swapfile
sudo swapon /var/spool/swap/swapfile

// swap 파일을 등록한다.
sudo vim /etc/fstab
파일이 열리면 해당 파일 아래쪽에 하단 내용 입력 후 저장
/var/spool/swap/swapfile    none    swap    defaults    0 0

// 메모리 상태 확인
free -h

2GiB(2기비바이트)가 잘 할당 된 것을 확인할 수 있다. 이후로 , 문제 없이 진행되었다

 

728x90