기주

[CI/CD] Github-Actions로 CI/CD 구축하기-1 본문

devops/CICD

[CI/CD] Github-Actions로 CI/CD 구축하기-1

기주그지마 2024. 12. 4. 17:05

Github-Actions로 CI/CD 구축하기-1

프로젝트 적용해보기

 

 

1. Nest JS 프로젝스 세팅

nest new [프로젝트명]
nest new github-practice-server

 

 

2. Github에 프로젝트 올리기

 

2-1) 깃허브 프라이빗 레포지토리 생성

 

2-2) 레포지토리에 프로젝트 올리기

cd github-action-practice
git init
git add .
git commit -m "first commit"
git branch -M main
git remote add origin [레포지토리 URI]
git push -u origin main

 

 

3. EC2 세팅

 

3-1) EC2 보안그룹 3000포트열기

 

NestJS는 기본적으로 3000포트에서 실행된다.

 

3-2) node 설치

sudo apt-get update && /
sudo apt-get install -y ca-certificates curl gnupg && /
mkdir -p /etc/apt/keyrings && /
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && /
NODE_MAJOR=20 && /
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list && /
sudo apt-get update && /
sudo apt-get install nodejs -y

# 노드버전확인
node -v

 

 

3-3) git clone을 이용해 프로젝트 다운받기

git clone [레포지토리 uri]

 

 

3-4 clone한 서버동작 확인

cd [프로젝트 명]
npm i
npm run build
npm run start:prod

 

 

4. 실제 배포 환경처럼 pm2 활용해서 서버 실행시키기

sudo npm i -g pm2
pm2 start dist/main.js --name "backend-server"

pm2 list # 서버 잘 실행되고 있는 지 확인
pm2 logs # 서버 잘 실행됐는 지 로그 확인

 

 

 

 

 

4. 배포 서버 설정

깃허브 인증정보가 저장되도록 하여 git pull을 할때마다 인증정보를 입력할 필요가 없도록 한다.

git config --global credential.helper store // 다음 깃허브 인증정보 입력시 이를 저장
git pull origin main 
+ 인증정보입력...

//그 이후
git pull origin main // 저장된 인증정보 이용하므로 입력할필요X

 

 

 

*깃허브 인증정보 저장시 주의할점

보안이슈

ls -a
cat .git-credentials

깃허브 인증정보를 서버에 저장해놓았기 떄문에

해당 서버 프로젝트폴더에서  이를 실행하면 깃허브 계정과 토큰을 볼 수 있다.

때문에 개인프로젝트나 신뢰할 수 있는 팀원과 함께할때만 github-actions를 쓰는게 좋다

 

 

 

 

 

github-acitons 라이브러리 살펴보기

https://github.com/marketplace

github actions marketplace 에 접속

ssh 검색

ssh Reomte Commands 라이브러리 이용 (사용법 참고) 

 

 

deploy.yml

name: nestJS CI/CD 적용하기

on:
  push:
    branches:
      - main

jobs:
  my-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Github Repository 불러오기
        uses: actions/checkout@v4

      - name: node js 설치
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: 의존성 설치
        run: npm ci

      - name: .env 파일 만들기
        run: |
          echo '${{ secrets.ENV }}' > .env

      - name: 테스트 코드 실행
        run: npm run test

      - name: SSH로 EC2에 접속하기
        uses: appleboy/ssh-action@v1.2.0
        env:
          ENV: ${{ secrets.ENV }} # ENV변수에 ENV할당
        with:
          host: ${{ secrets.EC2_HOST }} # EC2 주소
          username: ${{ secrets.EC2_USERNAME }} # EC2 사용자명
          key: ${{ secrets.EC2_PRIVATE_KEY }} # EC2 keypair
          envs: ENV
          script_stop: true # 아래 스크립트 하나라도 실패하면 실패처리
          script: |
            cd /home/ubuntu/githubAction-practice-server
            rm -rf .env
            git pull origin main
            echo "$ENV" > .env 
            npm i
            npm run build
            pm2 kill
            pm2 start dist/main.js --name "backend-server"