CI/CD에서 CI는 개발자를 위한 자동화 프로세스인 지속적인 통합
CD는 지속적인 서비스 제공 및 지속적인 배포를 의미한다.
CI를 성공적으로 구현할 경우, app에 대해 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 공유 repo에 통합되므로, 여러 명의 개발에 대한 코드가 서로 충돌할 수 있는 문제를 해결할 수 있다.
일반적인 개발의 단계는 다음과 같다.
Code - Build - Test
단계에서 CI를 고려해 볼 수 있다.
- Code : 개발자가 코드를 원격 저장소에 PUSH 하는 단계
- Build : 원격 저장소에서 코드를 가져와 테스트 후 빌드하는 단계
- Test : 코드 빌드의 결과물이 다른 컴포넌트와 잘 통합되는지 확인하는 과정
이 과정에서 지속적으로 코드를 push하고 build하며 해당 build의 Test 결과를 통해 개선 방안을 찾는다.
이러한 과정을 통해 개발자는 버그를 일찍 발견할 수 있고 테스트가 완료된 코드에 빠른 전달이 가능해진다.
위와 같은 지속적 통합을 통해 보안 이슈, 에러 등을 빠르게 파악할 수 있으며 보다 더 훨씬 효율적인 개발이 가능하다.
Release - Deploy - Operate
단계에서 지속적 배포를 고려해 볼 수 있다.
- Release : 배포 가능한 소프트웨어 패키지 작성
- Deploy : 프로비저닝을 실행하고 서비스를 사용자에게 노출, 실질적인 배포 부분
- Operate : 서비스 현황을 파악하고 생길 수 있는 문제를 감지함.
지속적 배포의 경우, 코드 변경 사항의 병합부터 프로덕션에 적합한 빌드 제공에 이르는 모든 단계를 뜻한다.
이 프로세스를 완료하면, Repo에 자동으로 배포가 가능하므로 운영팀이 보다 빠르고 손쉽게 App을 배포할 수 있게 된다.
Github Action은 Github 내에서 위와 같은 CI/CD의 자동화를 제공하는 플랫폼이다.
Repo에서 PR
이나 push
같은 트리거로 워크플로우를 구성할 수 있다.
이 때, 워크플로우는 자체 가상 머신에서 실행된다.
.yml
파일 내에서 워크플로우가 구성 되며 .github/workflows
디렉토리 아래에 위치된다.
# .github/workflows/client.yml
name: client // 현재 디렉토리 이름
on: // 트리거
push:
branches:
- main // 현재 branch
jobs:
build:
runs-on: ubuntu-20.04
steps:
- name: Checkout source code.
uses: actions/checkout@v2
- name: Install dependencies
run: npm install // 실행하는 npm
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-99-limjaesub-s3 \
--delete
working-directory: ./my-agora-states-client-react
여기서 env 부분의 AWS key 부분은 직접적으로 입력하면 AWS에서 보안상의 이유로 접근을 거부할 수 있다.
따라서, Github Action에서 Secret Key를 설정해줘야한다.
S3에서 잘 보이는것을 확인할 수 있다.