Github Action 이란?
Github이 공식 제공하는 빌드, 테스트, 배포 파이프라인 자동화를 위한 CI/CD 플랫폼이다.
어떤 이벤트가 발생했을 때 수행될 워크플로우를 .github/workflows 디렉토리에 <workflow 설명.yml> 형식으로 저장한다.
yaml 이란?
Yel Another Markup Language 의 약자로, 사람이 읽을 수 있는 데이터 직렬화 언어이다. JSON의 상위 격인 언어로 key : value의 계층 구조로 이루어진다. key : value 에서 value는 반드시 따옴표로 감싸야 한다.
| 기호는 줄바꿈, > 기호는 줄무시를 의미한다.
간단한 예시
# Workflow 이름
name: Workflow Name
# 해당 workflow 의 실행을 위한 이벤트 등록
# 현재는 push,와 pr 이 실행되었을 때 이 워크플로우가 실행된다.
on: [push, pull_request]
# 이벤트가 발생했을 때 어떤 일을 할 것인지 지정한다.
jobs:
# job 의 이름은 test 이다.
test:
# 아래 내용을 어디서 실행할 것인지 결정 (현재는 우분투 최신버전)
runs-on: ubuntu-latest
# 아래 step 을 따라서 test job을 수행한다.
steps:
- uses: actions/checkout@v2
- name: Bare Minimum Requirements
uses: actions/setup-node@v1
with:
node-version: '16'
- run: npm install
- run: npm test
Github Action은 크게 5가지 부분으로 구분할 수 있다.
- Event : 작업이 수행될 트리거를 의미한다.
- Workflow : 이벤트가 수행되면 실행될 작업의 모음이다.
- Job : Workflow 안에서 수행되어야 하는 일련의 작업들이다. 기본 병렬적으로 수행하고, 순착적으로 수행되어야 한다면 순서를 지정할 수 있다.
- Action : Job 수행하기 위해 미리 정해진 명령어
- Runner : Job을 실행하는 것으로 VM 머신 혹은 Docker 컨테이너가 된다.
# .github/workflows/client.yml
name: client
on:
push:
# 이벤트를 감지할 브랜치
branches:
- reference
jobs:
build:
runs-on: ubuntu-20.04
steps:
# Source 단계
- name: Checkout source code.
uses: actions/checkout@v2
- name: Install dependencies
run: npm install
working-directory: ./my-agora-states-client
# Build 단계
- name: Build
run: npm run build
working-directory: ./my-agora-states-client
- name: SHOW AWS CLI VERSION
run: aws --version
# S3 Bucket 배포 단계
- 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
# AWS CLI 명령어를 입력한다.
run: |
aws s3 sync \
--region ap-northeast-2 \
build s3://My-Bucket-Name \ # 빌드 폴더 이름 s3 ://버킷이름
--delete
working-directory: ./my-agora-states-client
AWS S3 접근을 위한 AWS 시크릿 ID 와 KEY 는 github의 Settings > Security > Actions 의 New repository secret으로 등록하여 위와 같이 접근하도록 한다. 절대 외부에 노출되면 안된다!
'WEB' 카테고리의 다른 글
[Web] Next.js 로 PWA(Progressive Web App)를 적용해보자! (0) | 2023.05.30 |
---|---|
Lighthouse 활용해보기 (0) | 2022.10.07 |
프론트엔드에서의 최적화 방법 (0) | 2022.10.07 |
CSR 과 SSR 알아보기! 부제 : 브라우저 렌더링은 서로 다르게 일어나는가? (1) | 2022.10.04 |
Webpack 으로 번들링을 해보자! (0) | 2022.09.26 |