Github Action 중 자동 배포하는 action을 만들어보자!
사전작업
- 배포할 클라이언트 파일 준비
- 배포 파일 올라갈 새로운 깃허브 레포지토리 생성해놓기
- AWS accces key, AWS secret key 준비 (노출 절대 X)
자동배포 설정
- 깃허브 레포지토리 Actions secrets에 AWS key 등록
.github
폴더에yml
파일 작성이벤트(push) 실행해서 자동 배포 확인
- S3 업로드 / 배포 확인
accces key ID
,secret accces key
준비 yml
파일에서 AWS에서 발급받은 key를 사용한다.yml
파일의 코드에 직접 key를 작성하는 것이 아니라 레포지토리의 Setting에 key들을 저장해 놓고 yml
파일에서는 이 경로를 지정해놓는 식으로 작성해 보안을 지킨다. Settings
- Secrets
- Actions
- New repository secret
버튼 클릭AWS_ACCESS_KEY_ID
, AWS_SECRET_ACCESS_KEY
각각 등록
(이후 작성할 yml
파일에서의 key와 이름 맞춰준 것..)
등록이 잘 됐다면 아래와 같이 확인할 수 있다.
.github
폴더에 yml
파일 작성.github > workflows > client.yml 전체 코드
name: client on: push: branches: - reference jobs: build: runs-on: ubuntu-20.04 steps: - name: Checkout source code. uses: actions/checkout@v2 - name: Install dependencies run: npm install working-directory: ./my-agora-states-client - name: Build run: npm run build working-directory: ./my-agora-states-client - name: SHOW AWS CLI VERSION env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_EC2_METADATA_DISABLED: true run: | aws --version - name: Sync Bucket env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_EC2_METADATA_DISABLED: true run: | aws s3 sync \ --region ap-northeast-2 \ build s3://fe-43-pikadev1771-s3 \ --delete working-directory: ./my-agora-states-client
name: client
on: push: branches: - reference
- git push 시 실행된다.
- 실행될 브랜치는
reference
(보통은main
,feat/OOO
등...)
steps
안에 각각의 실행 내용을 작성한다.jobs: build: runs-on: ubuntu-20.04 #배포 실행될 환경 steps: #각 단계의 이름과 실행내용을 나열해서 작성한다. - name: Checkout source code. uses: actions/checkout@v2 ...
- name: Install dependencies run: npm install #명령어 working-directory: ./my-client #디렉토리명
- name: Build run: npm run build working-directory: ./my-agora-states-client
env
부분에 해당 키 입력AWS_ACCESS_KEY_ID
, AWS_SECRET_ACCESS_KEY
의 값으로 각각 secrets.위에서 생성한 키 이름
으로 작성한다.- name: SHOW AWS CLI VERSION env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_EC2_METADATA_DISABLED: true run: | aws --version
env
부분에 해당 키 입력- name: Sync Bucket env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_EC2_METADATA_DISABLED: true run: | aws s3 sync \ --region ap-northeast-2 \ build s3://fe-63-shinnh2-s3 \ --delete working-directory: ./my-agora-states-client
run
(명령어) 부분 살펴보기aws s3 sync \ #sync냐 cp냐에 따라 차이가 있다. --region ap-northeast-2 \ #리전은 서울 build s3://fe-43-pikadev1771-s3 \ #build s3://[빌드 파일 올릴 버킷 이름] --delete #삭제된 파일 삭제 / sync냐 cp냐에 따라 다른 명령어 사용
aws s3 sync
: 업데이트된 파일만 복사해서 업로드aws s3 cp
: 버킷에 똑같은 기존 파일이 이미 있더라도 모든 파일을 복사해서 업로드--delete
: 기존과 달리 삭제된 파일이 있다면 버킷에서도 해당 파일을 삭제한다.
🔗 AWS 관련 가이드
🔗 https://stackoverflow.com/questions/64728076/aws-s3-cp-vs-aws-s3-sync-behavior-and-cost
push
) 실행해서 등록한 Actions 잘 실행되는지 확인 (초록색 체크 표시)참고