CI/CD
GitHub Actions Secret을 환경별로 나누는 방법
프로덕션 Secret과 개발 환경 Secret을 같은 저장소에서 관리할 때 이름 규칙으로 환경을 명확히 구분하자.
GitHub Actions에서 Secret을 쓸 때 프로덕션과 개발 환경을 섞으면 위험하다. 잘못된 Secret을 배포했을 때 돌이킬 수 없는 상황이 생길 수 있다.
Secret 이름에 환경명을 붙이자
PROD_DATABASE_URL
PROD_API_SECRET
STAGING_DATABASE_URL
STAGING_API_SECRET
DEV_DATABASE_URL
이렇게 하면 workflow에서도 명시적으로 환경을 지정할 수 있다.
workflow에서 환경별로 다르게 사용하기
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Deploy to production
if: github.ref == 'refs/heads/main'
env:
DATABASE_URL: ${{ secrets.PROD_DATABASE_URL }}
API_SECRET: ${{ secrets.PROD_API_SECRET }}
run: |
npm run deploy
이렇게 하면 배포 로그에도 "어느 환경의 Secret을 사용했는가"가 명확하게 드러난다.
체크리스트
- Secret 이름에 환경명이 들어있는가
- 브랜치별로 다른 Secret을 사용하는가
- 실수로 dev Secret을 prod에 사용하지는 않았는가
특히 세 번째는 배포 후 몇 시간이 지나서 알아챌 수 있으니 주의하자.