project/main

github action 환경 변수 설정

lap_mu 2023. 3. 19. 23:18

GitHup에 기능구현한 파일을 merge하면 우리가 사용하고 있는 AWS의 S3에 자동으로 정적 배포가 되게 해놓았다. 그런데 배포된 서버의 주소를 하드 코딩하지 않고 .env 파일을 만들어 환경변수 설정을 하고 사용한다. 하지만 github에 push할 때는 .env파일이 포함되지 않는다. 즉, 환경변수의 값이 undefined가 되어 서버와 통신할 수 없게 된다. 전에 자동배포를 하면서 만든 client.yml을 수정해서 merge를 하게 되면 github action에서 미리 등록해둔 서버 url을 사용해 .env.production.local 파일을 만들고 환경변수를 설정하고 이 환경변수를 사용할 수 있게 하면 된다.

 

name: client
on:
  pull_request:
    branches:
      - fe
    types:
      - closed
  • branch fe에 pull-request를 날리고 날린 pull-request가 닫힌다면?
jobs:
  if_merged:
    if: github.event.pull_request.merged == true
    runs-on: ubuntu-latest
  • merge가 일어난다면 ubuntu-latest 환경에서 실행된다.
- name: Generate Environment Variables File for Production
      run: |
        echo "REACT_APP_BASE_URL=$REACT_APP_BASE_URL" >> .env.production.local
      env:
        REACT_APP_BASE_URL: ${{ secrets.REACT_APP_BASE_URL }}
      working-directory: ./client

  • ./client에서 .env.production.local 파일을 만들고 미리 github에 설정해둔 secrets을 가져와 환경변수를 설정한다.
  • React를 사용하는 환경이라 환경변수는 REACT_APP_으로 시작해야된다.

전체 구조

//client.yml

name: client
on:
  pull_request:
    branches:
      - fe
    types:
      - closed

jobs:
  if_merged:
    if: github.event.pull_request.merged == true
    runs-on: ubuntu-latest
    steps:
    - run: |
        echo The PR was merged
    - name: Checkout source code.
      uses: actions/checkout@v3
    - name: Generate Environment Variables File for Production
      run: |
        echo "REACT_APP_BASE_URL=$REACT_APP_BASE_URL" >> .env.production.local
      env:
        REACT_APP_BASE_URL: ${{ secrets.REACT_APP_BASE_URL }}
      working-directory: ./client
    - name: Install dependencies
      run: npm install --force
      working-directory: ./client
    - name: Build
      run: npm run build
      working-directory: ./client
    - name: SHOW AWS CLI VERSION
      run: |
        aws --version
    - name: Sync Bucket
      env:
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_KEY }}
        AWS_EC2_METADATA_DISABLED: true
      run: |
        aws s3 sync \
          --region ap-northeast-2 \
          build s3://seb42main001 \
          --delete
      working-directory: ./client