깃헙 액션도, 도커도, 전부 처음 사용해보는 초보의 CI/CD 적용기이자 고군분투 기록..
frontend
, backend/proxy-server
, …
)위치한 서버 코드를 모두 한번에 빌드하거나 내려받으면 각각의 이미지가 너무 거대해져 불필요한 비용이 발생합니다. 이를 적절히 해결합니다.name: CI/CD Pipeline
on:
push:
branches:
- main
- be-feat#46 #테스트용 브랜치
jobs:
setup:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0
permissions:
packages: read
# 콘솔 서버 배포
deploy-console-server:
needs: setup
uses: ./.github/workflows/deploy-service.yml
with:
#...
# 프록시 서버 배포
deploy-proxy-server:
needs: setup
uses: ./.github/workflows/deploy-service.yml
with:
#...
# 네임 서버 배포
deploy-name-server:
needs: setup
uses: ./.github/workflows/deploy-service.yml
with:
#...
배포 방법을 다를지라도, 해당하는 하위 디렉토리로 체크아웃하고 도커 이미지를 빌드, 푸시하는 과정은 분명 반복되기에 실제 배포 스크립트를 분리하여 코드 중복을 피하였습니다. 자세한 설정 및 배포 과정은 각 서비스의 docker-compose 등에서 조절할 수 있을 거라 생각하였습니다.
여러 서버를 병렬로 배포해 시간을 줄이고자 하였습니다.
ci-cd.yml에서 input과 secret을 넘겨받고, 실제 배포 작업은 이 파일에서 이루어집니다.
동작 순서는 다음과 같습니다.
actions/checkout
의 sparse-checkout을 사용해 해당하는 디렉토리로 체크아웃합니다.