← 전체 글로 돌아가기

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을 사용했는가"가 명확하게 드러난다.

체크리스트

  1. Secret 이름에 환경명이 들어있는가
  2. 브랜치별로 다른 Secret을 사용하는가
  3. 실수로 dev Secret을 prod에 사용하지는 않았는가

특히 세 번째는 배포 후 몇 시간이 지나서 알아챌 수 있으니 주의하자.