ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • github action 환경 변수 설정
    project/main 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

     

Designed by Tistory.