본문 바로가기
C.W.K.
Stream
Lesson 04 of 12 · published

환경 비밀값

~12 min · environments, secrets, deploy

Level 0견습생
0 XP0/101 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

배포 대상에 범위를 지정한 비밀값

GitHub Actions의 환경은 이름이 붙은 배포 대상(staging, production, preview)이야. 각 환경마다 자기만의 비밀값, 변수, 보호 규칙, 배포 URL을 가질 수 있어.

대표적인 구성은 이런 식이야:

  • staging 환경은 STAGING_DB_URLSTAGING_API_KEY를 가지고 있어.
  • production 환경은 PROD_DB_URL, PROD_API_KEY에 필수 리뷰어까지 설정할 수 있어.
  • 하나의 워크플로 파일 안에 두 개의 작업을 두고, 각각 다른 환경에 범위를 지정하는 거지.

환경이 중요한 이유

  1. 피해 범위staging 대상으로 실행되는 워크플로는 production 비밀값을 아예 읽을 수 없어. 확실하게 벽이 쳐져 있거든.
  2. 승인 — 환경은 필수 리뷰어(수동 승인)와 대기 타이머(대기 기간)를 지원해. 배포 작업은 조건이 만족될 때까지 잠시 멈춰 있어.
  3. 브랜치 정책 — 환경을 특정 브랜치로 제한할 수 있어. 예를 들어 prod는 main 브랜치에서만 쓸 수 있게 하는 거지.
  4. 가시성 — Deployments 탭에서 각 환경에 현재 어떤 커밋이 배포됐는지, 실행 링크와 함께 확인할 수 있어.

Code

범위를 지정한 비밀값으로 두 환경에 배포하기·yaml
jobs:
  deploy-staging:
    runs-on: ubuntu-latest
    environment:
      name: staging
      url: https://staging.example.com
    steps:
      - uses: actions/checkout@v4
      - env:
          DB_URL: ${{ secrets.DB_URL }}        # staging value
          API_KEY: ${{ secrets.API_KEY }}      # staging value
        run: ./deploy.sh

  deploy-prod:
    needs: deploy-staging
    runs-on: ubuntu-latest
    environment:
      name: production               # required reviewers configured here
      url: https://www.example.com
    steps:
      - uses: actions/checkout@v4
      - env:
          DB_URL: ${{ secrets.DB_URL }}        # production value
          API_KEY: ${{ secrets.API_KEY }}      # production value
        run: ./deploy.sh

External links

Exercise

샌드박스 저장소에 staging이랑 production 환경을 만들어 봐. 각각 다른 값을 가진 단일 비밀값 API_KEY를 추가해. 환경마다 배포 작업을 하나씩, 총 두 개를 작성해. 가려진 값의 echo 출력 길이가 달라지는지 확인해 봐.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.