매번 개발자가 코드를 수정하고 빌드, 테스트, 배포까지 한다면 상당히 많은 시간이 소요가 된다.
어플케이션 개발 단계부터 배포때까지 자동화를 통해서 좀 더 효율적이고 빠르게 사용자에게 빈번이 배포할 수 있도록 만드는 것을 말한다.
Continuous Integration 지속적인 통합을 의미한다.
build, test 전 - 주황색 점 | 완료 - 성공 - 초록색 점 | 시래 - 빨간색 점 |
---|---|---|
Continuous Delivery / Deployment : 지속적인 제공 / 배포 를 뜻한다.
build, test 된 코드들은 배포가능하게 Release, Deploy, Operate 과정을 거친다.
github 에서 공식적으로 제공하는 CI/CD 툴로, 개발의 work flow를 자동화할 수 있게 도와주는 툴이다.
.github/workflow
폴더 아래에 저장되고 자동화 동작을 전달하면, Github Actions 는 해당 파일을 기반으로 그대로 실행시킨다.레포지토리의 .github/workflows
파일 안에 client.yaml
를 생성하여 YAML 파일형태로 event, job, step 을 정의한다.
YAML 파일에도 작성형식이나 규칙이 존재하는데, key-value 와 같이 객체 형태처럼 작성해야하고 :
뒤에
공백이 꼭 필요하다. 들여쓰기는 탭 대신 스페이스바를 사용한다.
# .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-react
- name: Build
run: npm run build
working-directory: ./my-agora-states-client-react
- name: SHOW AWS CLI VERSION
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-106-jeongjwon-s3 \
--delete
working-directory: ./my-agora-states-client-react
한 부분씩 살펴보면
name: client
액션 탭에 노출되는 workflow 이름으로 옵셔널한 값이다.
on:
push:
branches:
- reference
workflow 파일을 자동으로 실행(트리거)하는 이벤트를 병시한다.
push 이벤트를 명시하면 누군가가 레포지토리에 변경사항을 push 하는 시점마다 job이 실행된다.
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-react
- name: Build
run: npm run build
working-directory: ./my-agora-states-client-react
- name: SHOW AWS CLI VERSION
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-106-jeongjwon-s3 \
--delete
working-directory: ./my-agora-states-client-react
job 에 대한 설정이다.
runs-on
: 해당 job을 어떤 운영체제에서 실행할 것인지 명시한다.
steps
: job이 가질 수 있는 동작의 나열로, 각가의 step은 독립적인 프로세스를 가진다.
name
: 각 step의 이름uses
: 해당 step 에서 사용할 액션run
: 커맨드라인env
: 해당 job에서 사용할 환경변수를 Key-value 형태로 설정한다.보는 것과 같이 push 를 하고 actions 에는 실패한 흔적이 가득했다.
겨우 yaml 파일만 추가시키면 되는 것인데 말이다.
그 중에서도 환경변수를 설정하는 env 옵션에서 애를 먹었다.
AWS 의 액세스 키는 아주 중요한 정보이기 때문에 꼭 상수화를 통해 전달되어야 한다.
이 값은 깃허브의 Settings - Security - secrets and variables - Actions 에서 추가시키면 된다.
중요한 점은 깃허브에서 설정할 name과 env 옵션에서 적어주는 네이밍을 동일시 적용시켜야 한다.
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
그렇지 않으면 제대로 인식되지 않아 다른 에러로 착각하여 다른 곳에서 에러를 찾기 바빴다.