GitHub Actions 란?
GitHub Actions는 GitHub에서 제공하는 CI/CD툴입니다. 다시 말해서 Workflow를 자동화할 수 있게 도와줍니다.
GitHub Actions에 관해서는 다른 글에서 자세하게 다루도록 하고, 이 글에서는 제가 AWS S3에 배포 자동화를 하는 과정과 그 과정에서 발생한 문제를 해결하는 것에 관한 글을 쓰려고합니다.
1. AWS IAM
AWS IAM -> 액세스 관리 -> 사용자 -> 사용자 추가
우선 AWS IAM 설정을 해줘야합니다.
![0](/static/ff56e3bd22ab96201c2ad89b35e1397f/e85cb/0.png)
사용자 이름을 추가하고, AWS 액세스 유형 선택에서 액세스 키 - 프로그래밍 방식 액세스를 선택합니다.
![1](/static/eb13b0ef7a1610c300a2ee74d5f040ef/e85cb/1.png)
권한 설정에서 기존 정책 직접 연결을 선택하고, AmazonS3FullAccess를 선택합니다.
![2](/static/db468e0770c56c503bb443ae40daca50/e85cb/2.png)
뒤로 넘기다가 완료가 되면 .csv 다운로드를 선택해서 액세스 키를 다운로드 합니다.
비밀 키는 다시 다운로드 할 수 없고 분실한 경우 새로 발급 받아야한다!
2. GitHub Secrets
GitHub repository -> Settings -> Secrets -> New repository secret
![3](/static/b99b8184f5550a7a6cbc7de4ac810e4a/e85cb/3.png)
AWS IAM에서 발급한 액세스 키 ID와 비밀 액세스 키를 등록합니다.
3. GitHub Actions
GitHub repository -> Actions -> set up a workflow yourself
# main-deploy.yml
name: Deploy to Production
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-18.04
steps:
- name: Checkout source code
uses: actions/checkout@master
- name: Cache node modules
uses: actions/cache@v1
with:
path: node_modules
key: ${{ runner.OS }}-build-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.OS }}-build-
${{ runner.OS }}-
- name: Install Dependencies
run: npm install
- name: Build
run: npm run build
- name: Deploy
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
run: |
aws s3 cp \
--recursive \
--region ap-northeast-2 \
build s3://S3-Bucket-Name
제일 밑에 S3-Bucket-Name에는 본인의 Bucket 이름을 적으면 된다!
4. 배포 테스트
이제 main 브랜치에 푸시를 하면 자동으로 배포가 됩니다.
라고 생각했지만 저는 안됐습니다.
![4](/static/3886deefe93a412ae1c4d51e3a7fa27f/e85cb/4.png)
원인 분석을 위해 실패가 발생한 항목에 들어가서 로그를 확인해봤습니다.
![6](/static/e455106437973889bdcccba7b63da260/e85cb/6.png)
![7](/static/6060e5fc7168c1fd30273298746692e7/e85cb/7.png)
process.env.CI
가 true 설정되어 있어서 경고들이 오류로 간주된다는 내용이었습니다. 이 부분을 해결하기 위해 위에서 작성한 main-deploy.yml
을 수정했습니다.
# 수정 전
- name: Build
run: npm run build
# 수정 후
- name: Build
run: npm run build
env:
CI: ''
이제 GitHub Action이 정상적으로 작동합니다.
![5](/static/266651cd63ffd284ae24caff46a7daff/e85cb/5.png)
환경변수 설정
위에서 언급한 과정으로 GitHub Actions를 이용할 수 있지만 환경 변수를 적용하려면 어떻게 해야할까요?
![3](/static/b99b8184f5550a7a6cbc7de4ac810e4a/e85cb/3.png)
빌드 파일에서 사용할 환경 변수를 GitHub Secrets에 등록해줍니다. 저는 ReactJS에서 서버에 요청하는 BASE_URL이 개발 환경과 배포 환경에서 각각 달랐기 때문에 이걸로 예를 들어보려고 합니다.
main-deploy.yml
을 다시 한번 수정해줍니다.
# 수정 전
- name: Build
run: npm run build
env:
CI: ''
# 수정 후
- name: Build
run: npm run build
env:
CI: ''
REACT_APP_SERVER_BASE_URL: ${{ secrets.REACT_APP_SERVER_BASE_URL }}