Appearance
Git Action을 이용한 CI/CD
개요
이 문서는 Git Action을 이용해 CI/CD 파이프 라인을 설정하는 방법에 대해 설명합니다. 아래는 deploy.yml
파일의 구조와 각 단계에 대한 설명입니다.
deploy.yml
파일 구조
1. Workflow 이름
yaml
name: Deploy to NCP
Workflow의 이름은 "Deploy to NCP"로 설정되었습니다.
2. 실행 조건
yaml
on:
push:
branches:
- [dev-*, main]
이 Workflow는 dev
브랜치에 push 이벤트가 발생했을 때 실행됩니다.
Jobs 정의
1. CI (빌드 단계)
Job 이름: build
yaml
jobs:
build:
runs-on: ubuntu-latest
CI 단계는 ubuntu-latest
환경에서 실행됩니다.
Steps
Repository Checkout
yaml- name: Checkout repository uses: actions/checkout@v3
현재 브랜치를 checkout 합니다.
Node.js 환경 설정
yaml- name: Set up Node.js uses: actions/setup-node@v3 with: node-version: '16.16.0'
Node.js 16.16.0 버전을 사용합니다.
의존성 설치
yaml- name: Install dependencies run: yarn install
yarn install
명령어를 실행하여 프로젝트의 의존성을 설치합니다.프로젝트 빌드
yaml- name: Build project run: yarn build
yarn build
명령어를 실행하여 프로젝트를 빌드합니다.빌드 아티팩트 업로드
yaml- name: Upload build artifacts uses: actions/upload-artifact@v3 with: name: build path: build/
빌드된 파일을
Git Action
의 스토리지에 업로드합니다.
2. CD (배포 단계)
Job 이름: deploy
yaml
deploy:
needs: build
runs-on: ubuntu-latest
CD 단계는 CI 단계 (build
)가 완료된 후 실행됩니다.
Steps
빌드 아티팩트 다운로드
yaml- name: Download build artifact uses: actions/download-artifact@v3 with: name: build path: build/
CI 단계에서 업로드했던 빌드 아티팩트를 다운로드합니다.
SSH 키 설정
yaml- name: Setup SSH Key run: | mkdir -p ~/.ssh echo "${{ **secrets.NCP_SSH_KEY }**}" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa ssh-keyscan -H ${{ secrets.NCP_HOST }} >> ~/.ssh/known_hosts
SSH 키를 설정하여 원격 서버와의 연결을 준비합니다.
백업 파일 생성
yaml- name: make backup file run: | ssh ${{ secrets.NCP_USER }}@${{ secrets.NCP_HOST }} -p 8003 'sh /home/reload.sh'
기존 파일을 백업하기 위해 원격 서버에서 스크립트를 실행합니다.
파일 배포
yaml- name: Deploy files to NCP run: | scp -P 8003 -r build/* ${{ secrets.NCP_USER }}@${{ secrets.NCP_HOST }}:/home/irontrain/briggsTest/admin_tobe
빌드된 파일을 원격 서버의 지정된 경로로 전송합니다.
서버 재시작 (선택 사항)
yaml- name: Restart server (Optional) run: | ssh ${{ secrets.NCP_USER }}@${{ secrets.NCP_HOST }} -p 8003 'cd /home/irontrain/briggsTest/'
서버를 재시작하여 변경 사항을 적용할 수 있습니다.
요약
이 deploy.yml
파일은 Git Action을 이용해 CI/CD 파이프라인을 설정하는 방법을 명확히 설명합니다. CI 단계에서는 프로젝트를 빌드하고, CD 단계에서는 원격 서버에 배포합니다. 이를 통해 효율적이고 반복 가능한 배포 프로세스를 구축할 수 있습니다.
yaml
// deploy.yml
name: Deploy to NCP
on:
push:
branches:
- dev
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '16.16.0'
- name: Install dependencies
run: yarn install
- name: Build project
run: yarn build
- name: Upload build artifacts
uses: actions/upload-artifact@v3
with:
name: build
path: build/
deploy:
needs: build
runs-on: ubuntu-latest
steps:
- name: Download build artifact
uses: actions/download-artifact@v3
with:
name: build
path: build/
- name: Setup SSH Key
run: |
mkdir -p ~/.ssh
echo "${{ secrets.NCP_SSH_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan -H ${{ secrets.NCP_HOST }} >> ~/.ssh/known_hosts
- name: make backup file
run: |
ssh ${{ secrets.NCP_USER }}@${{ secrets.NCP_HOST }} -p ${{ secrets.NCP_PORT }} 'sh ${{ secrets.BACKUP_SCRIPT_PATH }}'
- name: Deploy files to NCP
run: |
scp -P ${{ secrets.NCP_PORT }} -r build/* ${{ secrets.NCP_USER }}@${{ secrets.NCP_HOST }}:${{ secrets.DEPLOY_PATH }}
- name: Restart server (Optional)
run: |
ssh ${{ secrets.NCP_USER }}@${{ secrets.NCP_HOST }} -p ${{ secrets.NCP_PORT }} 'cd ${{ secrets.PROJECT_PATH }}'