CI/CD | GithubAction

이준희·2023년 3월 1일
0

0. 글의 목적

이미 실무 환경에서 GithubAction을 이용하여 CI/CD 환경을 직접 구축하기도 해보고 사용하고 있지만 CI/CD라는 용어 자체의 개념에 대해선 두루뭉실하게 알고있는 느낌이라 CI/CD 개념을 정리하기 위해 글을 작성합니다.

1. CI/CD란?

개발 > 빌드 > 테스트 > 릴리즈 > 배포

CI/CD는 애플리케이션 개발 단계부터 배포 때까지의 모든 단계를 자동화를 통해서 좀 더 효율적이고 빠르게 사용자에게 빈번히 배포할 수 있는 것을 말한다.

CI - 지속적인 통합으로, 새로운 코드가 작성되었을 때 주기적으로 빌드 및 테스트가 진행되면서 공유되는 repository에 merge 되는 것
CD - 지속적인 배포(제공)으로, CI단계를 거친 코드를 실제 운영 서버에 자동 배포 하는 것

2. CI 단계에서,

개발자는 github와 같은 형상관리 시스템에 계속 커밋하고 통합합니다. 통합한 코드를 빌드하고 테스트하여 버그가 발생하면 버그를 해결합니다. 이 과정에서 빌드와 테스트를 자동으로 진행 해주면 아래와 같은 장점이 있습니다.

  • 여러 개발자가 관련된 코드를 작업하여 발생하는 충돌 문제를 해결할 수 있다.
  • 코드 검증에 들어가는 시간이 줄어들며, 개발 편의성이 좋아진다.
  • 커밋 할 때 마다 빌드와 자동 테스트가 이루어져 잘못된 merge를 예방할 수 있다.

repository의 특정 브랜치에 push가 되었거나, PR을 요청하였을 때를 확인하여 코드 테스트 및 통합을 할 수 있도록 합니다.

3. CD 단계에서,

공유 repository에 통합된 코드가 CI 단계를 마쳤다면 해당 코드는 배포할 준비가 되었습니다. 이 코드를 자동으로 배포하여 사용자는 항상 최신 버전의 서비스를 사용할 수 있게 됩니다. 배포를 자동화 함으로써 일일이 deploy하지 않아도 되며, 배포보다 개발에 집중할 수 있게 됩니다.

하지만, Delivery와 Deployment는 약간 다릅니다.

  • 지속적 제공 (Continuous Delivery)
    - CI를 마치고 릴리즈가 가능한 상태라면 배포까지 자동으로 해주는 것
  • 지속적 배포 (Continuous Deployment)
    - CI를 마치고 릴리즈가 가능한 상태라면 사람의 검증을 통해 수동으로 배포하는 것

3. CI/CD 툴

CI/CD 툴은 주로, Jenkins, Github Action, CircleCI,TeamCity 등등 찾아보니 많은 툴이 있다고 합니다. 그 중에서 저에게 가장 익숙한 CI/CD 툴인 GithubAction에 대한 개념을 간단하게 정리해보았습니다.

Github Action 이란?

Github Action은 Github에서 제공하는 CI/CD 툴입니다. 주로 개발 코드를 Github에서 관리하기 때문에 Github에 등록된 Repository 라면 CI/CD 관리가 정말 쉽습니다.

GitHub Actions를 사용하면 자동으로 코드 저장소에서 어떤 이벤트(event)가 발생했을 때 특정 작업이 일어나게 하거나 주기적으로 어떤 작업들을 반복해서 실행시킬 수도 있습니다. 예를 들어, 누군가가 코드 저장소에 Pull Request를 생성하게 되면 GitHub Actions를 통해 해당 코드 변경분에 문제가 없는지 각종 검사를 진행할 수 있고요. 어떤 새로운 코드가 메인(main) 브랜치에 유입(push)되면 GitHub Actions를 통해 소프트웨어를 빌드(build)하고 상용 서버에 배포(deploy)할 수도 있습니다. 뿐만 아니라 매일 밤 특정 시각에 그날 하루에 대한 통계 데이터를 수집시킬 수도 있습니다.

GitHub Actions 사용법을 익히기 전 꼭 알아야할 용어들

  • Workflows
    • 하나 이상의 작업(Job)을 실행하는 자동화된 프로세스입니다. 워크플로우는 YAML 파일에 의해 정의되고 특정 이벤트(Event)에 의해 트리거 되거나 직접 수동으로 트리거 될 수 있습니다.
  • Events
    • 위 워크플로우를 실행하게 하는 트리거를 뜻합니다. 새로운 코드를 push하거나, 새로운 PR을 생성하는 행위를 예로 들 수 있습니다.
  • Jobs
    • workflow내 정의된 여러 개의 순서 있는 작업(step)들의 묶음을 뜻합니다. 실행하고 싶은 workflow에서 실행할 작업들을 순서에 맞게 정의해놓은 부분이며, 각 작업(step)들은 서로 의존적입니다. 따라서 첫 번째 step에서 내가 작성한 애플리케이션을 빌드한 뒤 다음 스텝에서 첫 번째 스텝에서 빌드된 애플리케이션을 활용해 테스트를 돌릴 수 있습니다.
  • Actions
    • 복잡하며 자주 반복되는 작업들을 사용하기 편하게 만들어놓은 어플리케이션입니다. 라이브러리와 비슷한 개념이죠.
  • Runners
    • Workflow가 실행되는 서버. Ubuntu, Windows, MacOS를 지원합니다. 각 Runner는 한 번에 하나의 Job만 실행 가능합니다.

0개의 댓글