개인 프로젝트에서 많이 쓰는 CI/CD 구축 방법 (Github Actions)

유동우·3일 전
0

CI/CD

목록 보기
2/3

언제 사용?

  • Github 계정 정보가 해당 EC2에 저장된다
  • 따라서 개인 프로젝트 또는 믿을만한 사람들과 진행하는 토이프로젝트에서 사용한다
  • CI/CD를 빠르고 심플하게 적용시킬 수 있다

작업 흐름

1️⃣ Sping Boot 프로젝트 세팅 및 간단한 코드를 작성한다

2️⃣ Github에 프로젝트를 올린다

3️⃣ EC2에 들어가서 기본 환경 구성

✅ EC2 구성하기

  • 프리티어인 t2.micro 인스턴스를 생성하면 EC2가 멈추는 현상이 가끔 발생할 수 있다
  • 비용 문제상 t2.micro를 사용할 것이면 아래 링크를 참고하자
    [AWS]EC2 메모리 부족 현상 - swap 생성

✅ 보안그룹 8080번 포트 열기
✅ JDK 설치
✅ Git clone을 활용하여 프로젝트 다운받기
✅ EC2에서 clone 받은 서버가 잘 작동하는지 확인하기

$ cd {프로젝트 경로}
$ ./gradlew clean build
$ cd build/libs
$ nohup java -jar ________.jar &

$ sudo lsof -i:8080 # 8080번 포트에 Spring Boot가 실행되고 있는 지 확인

4️⃣ 실제 코드가 업데이트 될 때 어떤 과정을 거쳐서 배포하는지 짚어보기

✅ 내 로컬 컴퓨터에 새로운 코드 작성 -> Commit 찍은 뒤 Github push -> EC2에 들어가서 Git Pull 받기 -> 빌드 후 재배포하기

빌드 후 재배포 하는 코드
$ sudo lsof -i:8080 # 8080번 포트에 Spring Boot가 실행되고 있는 지 확인
$ sudo fuser -k -n tcp 8080 # 8080번 포트에 실행되고 있는 프로세스 종료
$ ./gradlew clean build
$ cd build/libs
$ nohup java -jar ________.jar &

5️⃣ 매번 Github 계정과 비밀번호를 치는 과정 없애기 (생략가능)

$ git config --global credential.helper store
$ git pull origin main
# Github 계정 및 비밀번호 입력

$ git pull origin main # 더 이상 비밀번호를 안 묻는 걸 확인할 수 있다. 

위 과정을 진행하면, ~/.git-credentials 에 로그인 정보를 저장해둠으로써 EC2에 접근할 수 있는 모든 사용자가 내 계정 정보를 확인할 수 있게된다.


6️⃣ 지금까지 했던 코드 배포 과정 자동화하기

✅ .github/workflows/deploy.yml 작성하기

name: Deploy To EC2

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    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/instagram-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 & 

✅ Github에 Secret값 넣어주기
✅ Github에 Push해서 Github Actions 잘 작동하는지 확인하기
✅ 실제 서버로 접속해서 잘 작동하는지 확인하기


7️⃣ application.yml 파일 넣는 과정 자동화시키기

✅ 현업 프로젝트에서는 민감한 값을 보관하기위해 application.yml 로 분리하는 경우가 많다
✅ 배포할 때 application.yml를 따로 넣는 과정을 자동화 해보자

.gitignore에 application.yml 추가 
-> application.yml 파일 생성
-> Github에 resources 폴더가 push 되도록 임의의 파일 하나 만들어주기 
-> Github Actions 코드 수정하기
-> Github에 Secret 값 넣어주기
-> 실제 EC2에 application.yml 파일도 같이 배포 잘 됐는지 체크하기

8️⃣ ⭐️테스트 코드 실패하면 CI/CD 과정일 실패하는 지 확인하기⭐️

./gradlew clean build 의 과정에서 테스트 코드 실행 과정이 포함되어있다
✅ 이때 CI/CD 과정에서 테스트 실패시 자동 배포가 진행되지 않고 중단되는지 확인해야한다

profile
효율적이고 꾸준하게

0개의 댓글