
Github Action 중 자동 배포하는 action을 만들어보자!
사전작업
- 배포할 클라이언트 파일 준비
- 배포 파일 올라갈 새로운 깃허브 레포지토리 생성해놓기
- AWS accces key, AWS secret key 준비 (노출 절대 X)
자동배포 설정
- 깃허브 레포지토리 Actions secrets에 AWS key 등록
.github폴더에yml파일 작성이벤트(push) 실행해서 자동 배포 확인
- S3 업로드 / 배포 확인
accces key ID,secret accces key 필요 (AWS에서 IAM 사용자로 등록하면 발급해준다) 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 잘 실행되는지 확인 (초록색 체크 표시)참고