GitHub Actions와 CI/CD

woong·2024년 7월 9일
0

GitHub Actions이 어떤 역할을 하는 툴이지?

GitHub Actions은 CI/CD를 구현할 수 있는 도구이며, 빌드, 테스트, 배포 등의 파이프라인을 자동화할 수 있다.

그럼 CI/CD는 뭐고 파이프라인은 뭐지?

  1. CI/CD는 소프트웨어 개발 프로세스를 자동화하고 효율화하는 방법론이다.
  2. 파이프라인은 소프트웨어 개발 과정의 여러 단계를 자동화하는 일련의 프로세스이다.

둘이 뭐가 다른거지? 비슷해 보이는데?

CI/CD (방법론): 부품들을 자주, 작은 단위로 조립하는 방식 및 완성된 차를 바로 출고하거나 판매장으로 이동시키는 방식
파이프라인 (구현): 공장의 조립 라인 자체 및 부품 투입부터 최종 검수, 출고까지의 전체 자동화된 과정

CI/CD는 소프트웨어 개발의 방법론이고, 파이프라인은 이를 실제로 구현하는 자동화된 프로세스이구나.

근데 그럼 CI와 CD는 각각 뭘 뜻하는거지?

  1. CI (Continuous Integration, 지속적 통합)
    • 개발자들이 코드 변경사항을 자주 메인 브랜치에 병합하는 practice이다.
    • 변경사항이 병합될 때마다 자동으로 빌드하고 테스트한다.
    • 목적은 버그를 빨리 발견하고, 소프트웨어 품질을 개선하며, 검증 시간을 줄이기 위함이다.
  1. CD (Continuous Delivery/Deployment, 지속적 제공/배포):
    • Continuous Delivery: 소프트웨어를 언제든지 릴리스할 수 있는 상태로 유지한다.
    • Continuous Deployment: 변경사항을 자동으로 프로덕션 환경에 배포한다.

CI/CD를 좀더 쉽게 이해할 수는 없을까?

레고 블록으로 집을 만드는 과정이라고 생각해보면 어떨까

  1. CI (지속적 통합):
    • 여러 사람이 각자 레고 블록을 만들고 있다.
    • 새 블록을 만들 때마다, 전체 구조에 맞는지 확인한다 (자동 테스트).
    • 문제가 없으면 메인 구조물에 추가한다 (코드 병합).
  1. CD (지속적 제공/배포):
    • 지속적 제공: 집의 일부분이 완성될 때마다, 전시할 준비를 한다.
    • 지속적 배포: 새로운 부분이 완성되면 자동으로 전시장에 옮긴다.

GitHub Actions가 어떤건지, CI/CD가 뭔지 이해했다.

그렇다면 GitHub Actions를 잘 사용하려면 어떤 개념을 알아야 하지?

  1. 이벤트 (Events)
    • 워크플로우를 트리거하는 특정 활동이나 규칙
    • 예: 코드 푸시, 풀 리퀘스트 생성, 이슈 생성 등
    • 비유: 요리 로봇을 작동시키는 버튼. 누군가 버튼을 누르면 로봇이 일을 시작
  1. 워크플로우 (Workflows):
    • 자동화하려는 전체 프로세스
    • YAML 파일로 정의되며, 하나 이상의 잡으로 구성된다.
    • 비유: 전체 요리 과정의 레시피. 재료 준비부터 요리, 서빙까지의 전체 과정
  1. 잡스 (Jobs):
    • 워크플로우 내에서 독립적으로 실행되는 일련의 단계
    • 기본적으로 병렬로 실행되지만, 순차적으로 실행되도록 설정할 수도 있다.
    • 비유: 레시피 내의 각 요리 과정. 예를 들어 '재료 손질', '조리', '플레이팅' 등등
  1. 액션 (Actions):
    • 작업을 수행하는 가장 작은 단위의 명령
    • 재사용 가능한 코드 단위로, 커뮤니티에서 공유하거나 직접 만들 수 있다.
    • 비유: 요리 로봇이 수행할 수 있는 개별 동작들. '썰기', '볶기', '끓이기' 등의 기본 동작들
  1. 러너 (Runners):
    • 워크플로우 잡을 실행하는 서버
    • GitHub에서 호스팅하는 러너를 사용하거나 직접 호스팅할 수 있다.
    • 비유: 요리 로봇이 일하는 주방. GitHub에서 제공하는 주방을 쓸 수도 있고, 자신의 주방에서 로봇을 작동시킬 수도 있다.

개념들은 알겠고 그럼 이걸 코드로 어떻게 쓰는거지?

# 예시코드

# 워크플로우의 이름을 지정
name: Node.js CI

# 워크플로우를 실행시킬 이벤트를 정의
on:
  push:
    branches: [ main ]  # main 브랜치에 push가 발생하면 실행
  pull_request:
    branches: [ main ]  # main 브랜치로 pull request가 생성되면 실행

# 실행할 작업들을 정의
jobs:
  # 'build'라는 이름의 작업을 정의
  build:
    # 작업을 실행할 운영 체제를 지정
    runs-on: ubuntu-latest

    # 여러 버전의 Node.js에서 테스트를 실행하기 위한 매트릭스 전략을 정의
    strategy:
      matrix:
        node-version: [14.x, 16.x, 18.x]  # 테스트할 Node.js 버전들

    # 작업의 각 단계를 정의
    steps:
    # 저장소의 코드를 작업 환경으로 체크아웃
    - uses: actions/checkout@v3

    # 지정된 버전의 Node.js를 설정
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v3
      with:
        node-version: ${{ matrix.node-version }}

    # 프로젝트의 의존성을 설치
    - run: npm ci

    # 프로젝트를 빌드 (빌드 스크립트가 있는 경우에만 실행)
    - run: npm run build --if-present

    # 테스트를 실행
    - run: npm test

이 파일을 어디에 위치시켜야 하는거지?

.github/workflows/파일명.yml


profile
안녕하세요! 👋

0개의 댓글