CI
는 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미
CD
는 지속적인 서비스 제공(Continuous Delivery) 및/또는 지속적인 배포(Continuous Deployment)를 의미. 이 두 용어는 상호 교환적으로 사용
개발자를 위한 자동화 프로세스라고 볼 수 있음
Code
: 개발자가 코드를 원격 코드 저장소 (Ex. github repository)에 push하는 단계
Build
: 원격 코드 저장소로부터 코드를 가져와 유닛 테스트 후 빌드하는 단계
Test
: 코드 빌드의 결과물이 다른 컴포넌트와 잘 통합되는 지 확인하는 과정
지속적인 서비스 제공(Continuous Delivery) 및 지속적인 배포(Continuous Deployment)를 의미하며 이 두 용어는 상호 교환적으로 사용됨
Release
: 배포 가능한 소프트웨어 패키지를 작성
Deploy
: 프로비저닝을 실행하고 서비스를 사용자에게 노출 -> 실질적인 배포
Operate
: 서비스 현황을 파악하고 생길 수 있는 문제를 감지
수 없이 진행되는 배포 과정을 자동화시키는 방법을 구축하는 것
배포에서 파이프라인(Pipeline)
이란 용어는 소스 코드의 관리부터 실제 서비스로의 배포 과정을 연결하는 구조를 뜻함. 파이프라인은 전체 배포 과정을 여러 단계(Stages)로 분리하고 각 단계는 파이프라인 안에서 순차적으로 실행되며, 각 단계마다 주어진 작업(Actions)들을 수행함
Source
단계: Source 단계에서는 원격 저장소에 관리되고 있는 소스 코드에 변경 사항이 일어날 경우, 이를 감지하고 다음 단계로 전달하는 작업을 수행Build
단계: Build 단계에서는 Source 단계에서 전달받은 코드를 컴파일, 빌드, 테스트하여 가공합니다. 또한 Build 단계를 거쳐 생성된 결과물을 다음 단계로 전달하는 작업을 수행Deploy
단계: Deploy 단계에서는 Build 단계로부터 전달받은 결과물을 실제 서비스에 반영하는 작업을 수행이 과정이 실무에서는 반복적인 프로세스이기 때문에 이 부분을 일련의 자동화 단계로 만든다고 볼 수 있음
client에서 npm install
npm install
후에 npm run build
build
성공 !
하지만 이건 자동화가 아니었다......ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
vscode 에서 .github -> workflows -> yml 파일 작성 => git push 이 과정을 거쳐야 자동화를 경험 할 수 있다
1). 레포지토리 생성
2). 레퍼런스 코드 클론
3). 새로운 레퍼지토리를 원격 레포지토리로 등록
4). 레퍼런스 코드를 새로운 레퍼지토리로 push
git remote add myRepo git@github.com:kangseong-sim/deploy-practice.git
#레퍼런스 코드 클론
git clone git@github.com:codestates-seb/fe-sprint-my-agora-states-server-reference.git
# 디렉터리 이동
cd fe-sprint-my-agora-states-server-reference
// 여기서부턴 vscode 터미널에서
# 새로운 리포지토리를 원격 리포지토리로 등록
git remote add myRepo git@github.com:{나의 깃헙 아이디}/{새로운 리포지토리 이름}.git
# 기존 레퍼런스 코드를 새로운 리포지토리로 push
git push myRepo reference
1) 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:
![](https://velog.velcdn.com/images/seongsimk/post/0f0450fe-ef09-4c4d-b6f3-ade86eb6be96/image.png)
: ${{ 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-6-kangseong-sim-s3 \
--delete
working-directory: ./my-agora-states-client
2) github - Actions secrete - Repository secrets
3) yml 파일 push
하기
git add .
git commit -m "add client"
git push myRepo reference
4) 차분한 기다림 ..^^
흑흑 드디어 성공 ㅜㅜㅜ
5) aws 배포 자동화 확인
yml 파일을 작성한대로 aws가 자동으로 배포를 해준다!!!!
사실 실시간 세션 전에도 성공을 하긴 했지만,,,
배포 "자동화"가 아닌 aws에 가서 drag-drop으로 올린거였다..ㅎㅎ
그때만 해도 뭐가 잘못된지 몰랐는데 지나고 복습을 하다보니 완전 실수투성이 그자체...^^
yml 파일도 github 작성하질 않나,,,
제일 큰 난관은 Actions secrete을 적는거였다..
이걸 작성할 때 이름 자체가 변수?인거 같다. yml 파일의 `key : value`를 잘 보고 key는 name에 적고 value는 secret에 적어주면 된다...ㅎㅎㅎㅎ
계속 secret name에 build(지나고 보니 진짜 바보네 ㅎㅎ) 라고 적고 secret 안에는 `key : value` 를 그대로 적어버린 것이다.. 그러니 계속해서 인증 관련해서 에러 코드가 발생했고 그래도 실시간 세션 전에 방법을 알아내서 Actions secrets는 잘 작성할 수 있었다...!!!
그래도 차라리 오류가 나는 걸 github에서 바로 바로 볼 수 있어서.. push 하고 오류 나면 .. 큰일 나잖어...