[Codestates] CI/CD & 클라이언트 배포

송현우·2022년 12월 7일
0
post-thumbnail

CI/CD

지속적인 통합(Continuous Integration)

  • 자동화 프로세스인 CI는 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합된다.
  • Code - Build - Test 단계
    Code: 개발자가 코드를 원격 코드 저장소에 push
    Build: 원격 코드 저장소로부터 코드를 가져와 유닛 테스트 후 빌드
    Test: 코드 빌드의 결과물이 다른 컴포넌트와 잘 통합되는 지 확인

원격 저장소에 push ➡ 테스트 및 빌드 ➡ 통합 테스트 ➡ 개선 방안 검토

  • 코드를 머지하기 전에 빌드, 테스트 오류를 확인하여 효율적인 개발이 가능하다.
  • 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 충돌을 예방한다.

위의 지속적 통합을 통해

  • 각자 개발한 코드를 이른 시점에 확인
  • 버그를 일찍 발견
  • 테스트가 완료된 코드에 대해 빠른 전달이 가능해지며 지속적인 배포가 가능

서비스 제공(Continuous Delivery) 및 지속적인 배포(Continuous Deployment)

  • 두 가지 의미 모두 파이프라인의 추가 단계에 대한 자동화를 의미한다.
  • 얼마나 많은 자동화가 이루어지고 있는지를 설명하기 위해 별도로 사용되기도 한다.
  • Release - Deploy- Operate 단계에서 꾀할 수 있습니다.
    Release : 배포 가능한 소프트웨어 패키지를 작성
    Deploy : 프로비저닝을 실행하고 서비스를 사용자에게 노출 (실질적인 배포)
    Operate : 서비스 현황을 파악하고 생길 수 있는 문제 감지
  • 코드 변경 사항의 병합부터 프로덕션에 적합한 빌드 제공에 이르는 모든 단계
  • 테스트 자동화와 코드 배포 자동화가 포함
  • 프로덕션 준비가 완료된 빌드를 코드 리포지토리에 자동으로 배포
  • 최근에는 클라우드 기술 발전과 맞물려 지속적 통합과 지속적 배포가 빠른 속도로 진행되면서 CI/CD를 하나로 묶어서 다루는 경우가 점차 증가

배포 자동화

  • 한번의 클릭 혹은 명령어 입력을 통해 전체 배포 과정을 자동으로 진행하는 것
  • 수동적이고 반복적인 배포 과정을 자동화함으로써 시간이 절약
  • 휴먼 에러(Human Error)를 방지

CI/CD 파이프라인

원격 저장소에 push ➡ 빌드 및 테스트, 릴리즈 ➡ 배포서버 ➡ 배포 ➡ 애플리케이션 서버

  • 코드가 빌드되면서 최종적으로 배포가 되는 단계까지 자동화
  • 일련의 자동화 단계로 만드는데, 이것을 파이프라인을 구축한다고 함

  • 파이프라인은 전체 배포 과정을 여러 단계(Stages)로 분리
  • 각 단계는 순차적으로 실행되며, 주어진 작업(Actions)들을 수행

Source 단계: 원격 저장소의 소스 코드에 변경 사항이 일어날 경우, 이를 감지하고 다음 단계로 전달

Build 단계: 전달받은 코드를 컴파일, 빌드, 테스트하여 가공하고 Build 단계를 거쳐 생성된 결과물을 다음 단계로 전달

Deploy 단계: 전달받은 결과물을 실제 서비스에 반영하는 작업을 수행

파이프라인의 단계는 필요에 따라 더 세분화되거나 간소화될 수 있으며, 소개하는 업체마다 용어가 상이할 수 있음


Github Actions

  • Github가 공식적으로 제공하는 빌드, 테스트 및 배포 파이프라인을 자동화할 수 있는 CI/CD 플랫폼
  • 레포지토리에서 Pull Request 나 push 같은 이벤트를 트리거로 GitHub 작업 워크플로(Workflow)를 구성
  • 워크플로는 하나 이상의 작업이 실행되는 자동화 프로세스로, 각 작업은 자체 가상 머신 또는 컨테이너 내부에서 실행

워크플로는 .yml (혹은 .yaml ) 파일에 의해 구성되며, 테스트, 배포 등 기능에 따라 여러개의 워크플로도 만들 수 있습니다. 생성된 워크플로는 .github/workflows

워크플로에 담길 .yml의 양식은 아래 예시와 같이 작성할 수 있다.

.github/workflows
name: 워크플로 이름

# 언제 job을 작동시킬지
on: [push, pull_request]

# 어떤 job을 할지
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: 스텝 명
        uses: actions/setup-node@v1
        with:
          node-version: '16'
      - run: npm install
      - run: npm test

작업할 레포지토리의 Actions 탭에 가면 다음과 같이 Github Actions가 실행된 것을 볼 수 있다.

0개의 댓글