
CI/CD란? Continuous Integration/Continuous Delivery or Deployment의 약자로, 말 그대로 지속적으로 통합하고 배포한다는 의미이다.
원래 우리 팀은 일정이 급해서 해당 파이프라인을 구축하지 않은 채로 서버배포를 맡은 내가 그때그때 pull을 받아가며 서버를 어찌어찌 운영하고 있었는데, 낮밤을 가리지 않고 pull을 받아가며 CI/CD의 필요성을 몸소 느끼게 되어 작성하게 되었다.
서버를 하나만 사용하기도 했고, 실제 배포 과정도 간소하게 진행한 후에 ssh 창에서 git pull, pm2 restart all 등을 해준 것이 전부여서 템플릿도 간단하게 작성했다.
해당 파일은 .github > workflows > deploy.yml 로 작성했다.
name: CI/CD Pipeline via SSH Deployment
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Deploy via SSH
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd SOF-Backend
git pull origin main
npm install
pm2 restart all
name에는 해당 workflow의 이름을 적어주면 되는데, 이 이름이 이후 Github의 Actions 탭에 보이게 된다.
on 카테고리는 해당 workflow가 작동하는 조건이라고 생각하면 되는데, 위의 코드에서는 main branch에 코드가 push될 때마다 작동하도록 작성되어있다.
jobs 카테고리에는 workflow가 실행될 때 실행되는 작업들의 목록을 정의하고 있다. deploy는 내가 임의로 지은 작업의 이름이며, 배포될 때 실행된다고 해서 지었다.
runs-on 에는 실행환경을 정의한다. 나는 EC2 컨테이너를 ubuntu 실행환경에서 실행해서 ubuntu로 지정했다.
steps에서는 deploy 작업의 실행 단계별 동작들을 정의하게 된다. name 에는 실행 단계별 동작의 이름을 짓고, uses 에서는 GitHub Actions 액션을 호출해서 사용하게 된다.
actions/checkout@v3 는 깃허브의 저장소의 코드를 가져오는 역할이다.
appleboy/ssh-action@master 는 원격 서버에 SSH로 접속하여 명령을 실행하는 역할이다.
script 에는 이전에 수동으로 하나하나 SSH 창에 입력했던 명령어들을 순서대로 적어주면 된다.