CI/CD

서유진·2022년 10월 31일
1

server

목록 보기
3/3

ci/cd


CI/CD는 애플리케이션 개발 단계를 자동화하여 애플리케이션을 보다 짧은 주기로 고객에게 제공하는 방법
파이프라인으로 표현되는 실제 프로세스를 의미하고, 애플리케이션 개발에 지속적인 자동화 및 지속적인 모니터링을 추가하는 것을 의미

장점

  • 수정 및 추가된 기능을 짧은 주기로 고객에게 제공할 수 있게 됩니다.
  • 사람이 수동으로 테스트, 통합, 배포 단계를 거치면 번거로우며 시간도 많이 걸립니다.
  • 사람이 수동으로 테스트, 통합, 배포 단계를 거치면 실수를 저지를 수 있습니다.

종류

  • Jenkins
  • CircleCI
  • TravisCI
  • Github Actions
    ...

CI

지속적인 통합(Continuous Integration) 의 약자로, 새로운 코드 변경 사항을 말 그대로 지속적으로 빌드 및 테스트하여 main 브랜치에 통합하는 과정

  • 빌드, 테스트, 통합 과정을 자동화
  • 변경된 코드에 대한 즉각적인 피드백
  • 커밋할 때마다 빌드와 일련의 자동 테스트가 이루어져 동작을 확인하고 변경으로 인해 문제가 생기는 부분이 없도록 보장

CD

지속적인 제공(Continuous Delivery) 또는 지속적인 배포(Continuous Deployment)의 약자
효과적인 CD 프로세스를 실현하기 위해서는 개발 파이프라인에 CI가 먼저 구축되어있어야 한다.

지속적 제공(Continuous Delivery)

개발자들이 애플리케이션에 적용한 변경 사항이 버그 테스트를 거쳐 리포지토리에 자동으로 업로드되는 것을 의미

  • 프로덕션 환경으로 배포할 준비가 되어 있는 코드베이스를 확보하여 최소한의 노력으로 새로운 코드를 배포하는 것을 목표

  • 코드 변경 사항 병합부터 프로덕션에 적합한 빌드 제공에 이르는 모든 단계에는 테스트 자동화와 코드 릴리스 자동화가 포함

  • 이 프로세스를 완료하면 운영팀이 보다 빠르고 손쉽게 애플리케이션을 프로덕션으로 배포할 수 있게 함

지속적 배포(Continuous Deployment)

지속적 제공의 확장된 형태
개발자의 변경 사항을 리포지토리에서 고객이 사용 가능한 프로덕션 환경까지 자동으로 릴리스하는 것을 의미

  • 애플리케이션 제공 속도를 저해하는 수동 프로세스로 인한 운영팀의 프로세스 과부하 문제를 해결 ( == 수동으로 진행하는 작업 속도 저하의 문제를 해결 )

  • 개발자가 애플리케이션에 변경 사항을 작성한 후 몇 분 이내에 애플리케이션을 자동으로 실행할 수 있음(자동화된 테스트를 통과한 것으로 간주)

  • 사용자 피드백을 지속적으로 수신하고 통합=하기 쉬워짐

차이점

프로덕션 배포까지 자동화하는지 여부.
지속적 전달은 프로덕션은 수동으로 배포하며, 지속적 배포는 프로덕션까지 자동으로 배포합니다.

무중단 배포

일반적으로 배포를 하면, 서버가 잠시 중단되어서 서비스를 이용할 수 없지만, 무중단 배포는 배포를 하더라도 멈추지 않고 서비스를 이용할 수 있다.

  • 서버가 2개 이상

GitHub Actions

GitHub Actions


사진

  • Github Repository: 기존 방식대로 협업하며, master 브랜치에는 자동으로 배포 될 버전들이 머지
  • Github Actions: master 브랜치를 실시간으로 감시하며, push가 일어난 경우에 자동 배포 프로세스를 수행 / AWS IAM 키를 repository의 secret에 보관하다가 전달

workflows

GitHub Actions에서 가장 상위 개념
워크플로우(Workflow, 작업 흐름)는 쉽게 말해 자동화해놓은 작업 과정
워크플로우는 코드 저장소 내에서 .github/workflows 폴더 아래에 위치한 YAML 파일로 설정하며, 하나의 코드 저장소에는 여러 개의 워크플로우, 즉 여러 개의 YAML 파일을 생성할 수 있다.

ON

name: sns-github-action
on:
  push:
    branches: [ main ]

main branchpush 이벤트가 on 실행되었을 때 일어나는 일

on:
 schedule:
  - cron: "0 0 * * *"

주기적으로 실행하는 cron도 가능

jobs

작업은 워크플로우 YAML 파일 내에서 jobs 속성을 사용하며 작업 식별자(ID)와 작업 세부 내용 간의 맵핑(mapping) 형태로 명시


jobs:
  job1: # 작업 아이디
    # job1에 대한 세부 내용
  job2:
    # job2에 대한 세부 내용
  job3:
    # job3에 대한 세부 내용
    

runs-on : 필수 속성으로, 실행 환경 지정

jobs:
  job1:
    runs-on: ubuntu-latest # or windows-latest or macos-latest
    steps:

Steps 속성

GitHub Actions에서는 각 작업(job)이 하나 이상의 단계(step)로 모델링
커맨드(command) / 스크립트(script) / 액션(action) 등 다양한 형태로 작성가능하다.

name

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: test start
        run: npm test
  • 말 그대로 실행에 대한 이름을 정한다

run

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - run: npm install
      - run: npm test
  • 커맨드(command) / 스크립트(script)
  • run을 사용하고, 한 단계의 구분은 - 를 사용한다.

Action

GitHub Actions에서 빈번하게 필요한 반복 단계를 재사용하기 용이하도록 제공되는 일종의 작업 공유 메커니즘
하나의 코드 저장소 범위 내에서 여러 워크플로우 간에서 공유 가능
공개 코드 저장소를 통해 액션을 공유하면 GitHub 상의 모든 코드 저장소에서 사용이 가능

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3 
  • uses을 사용하고, 한 단계의 구분은 - 를 사용한다.

다양한 액션 구경하기

profile
Backend Dev.

0개의 댓글