ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CI/CD] Github-Actions로 CI/CD 구축하기-1
    devops/CICD 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"

     

Designed by Tistory.