저번 테커 부트캠프때 깃허브를 이용해서 CI/CD를 해봤는데 지금 읽는 스터디 책에 깃허브로 CI하는 내용이 있어서 정리 한 번 해보고 코드에 반영을 할 수 있으면 반영까지 해보려고 한다!
CI란?
우선 기본적인 CI의 정의는 Continuous Integration(지속적 통합)의 약자로, 소프트웨어 개발에서 자주 사용하는 개발 관행 및 프로세스이다.
코드에 CI를 적용함으로써 팀 구성원이 각자의 코드를 주기적으로 공통 레포지토리에 통합하는 작업을 자동화하여, 통합 과정에서 발생할 수 있는 문제를 조기에 발견하고 해결하도록 돕는다.
CI의 주요 개념
- 지속적 통합(Continuous Integration):
- 개발자가 작업 중인 코드를 자주(하루에도 여러 번) 공유 리포지토리에 푸시하여 다른 개발자의 코드와 통합.
- 통합 시 자동화된 빌드와 테스트를 실행해 코드의 품질을 검증.
- 자동화된 빌드:
- 코드를 푸시하면 CI 시스템이 자동으로 애플리케이션을 빌드(컴파일)합니다.
- 빌드 실패를 통해 코드 오류를 조기에 발견.
- 자동화된 테스트:
- 푸시된 코드에 대해 자동화된 테스트(유닛 테스트, 통합 테스트 등)를 실행하여 코드 변경으로 인한 문제를 방지.
- 코드 품질 관리:
- CI는 린트(Lint), 코드 스타일 검사 등을 포함해 코드의 일관성과 품질을 유지.
CI의 목표
- 코드 안정성: 자주 통합하고 테스트하여 문제를 조기에 발견하고 수정.
- 효율성 향상: 반복적인 수작업(빌드, 테스트)을 자동화.
- 팀 협업 개선: 여러 개발자가 동시에 작업하는 상황에서 통합 문제를 최소화.
- 빠른 피드백: 코드 문제를 빠르게 알림으로써 개발 속도와 품질 향상.
깃허브 액션 CI
깃허브 액션의 기본 개념
- 러너
- GitHub Actions 워크플로우를 실행하는 실제 머신(컴퓨터)이다.
- 워크플로우 파일에 정의된 명령어를 실행하는 역할을 담당
- 깃허브 호스팅 러너나 셀프 호스팅 러너를 사용할 수 있다.
- 액션
- 워크플로우의 단위 작업으로, 특정 작업(예: 빌드, 테스트, 배포)을 수행하는 재사용 가능한 코드 블록이다.
- 액션은 주로 JavaScript 또는 Docker 컨테이너로 작성된다.
GitHub Marketplace
에서 다양한 액션을 다운로드하여 사용 가능 하다.
- 이벤트
- 워크플로우를 트리거(시작)하는 특정 활동입니다.
push
: 특정 브랜치에 코드가 푸시될 때 트리거.pull_request
: PR(풀 리퀘스트)이 생성되거나 업데이트될 때 트리거.workflow_dispatch
: 수동으로 워크플로우를 실행.schedule
: 크론(Cron) 표현식을 사용한 스케줄러.
- 워크플로우를 트리거(시작)하는 특정 활동입니다.
- 잡
- 워크플로우에서 실행되는 독립적인 작업의 집합입니다.
- 각 잡은 독립적인 러너에서 실행됩니다.
- 잡 간의 의존성을 설정할 수 있습니다.
- 스텝
- 잡 안에서 실행되는 단일 작업입니다.
- 스크립트 명령어 또는 액션을 실행합니다.
깃허브 액션 작성하기
깃허브 액션은 저장소의 루트에 .github/workflows 폴더를 생성하고 .yml 파일로 작성하면 된다.
name: chapter7 build
run-name: ${{ github.actor }} has been added new commit.
on:
push:
branches-ignore:
- 'main'
jobs:
build: # 예약어가 아니라, 사용자가 지정한 잡안에 있는 스텝의 이름이다.
runs-on: ubuntu-latest # 러너를 설정한다.
steps: # 순차적으로 실행할 작업을 설정한다.
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- name: 'install dependencies' # 스템의 이름
working-directory: ./chapter7/my-app # 이 폴더에서
run: npm ci # 이 명령어를 실행
- name: 'build'
working-directory: ./chapter7/my-app
run: npm run build
name → 액션의 이름
run-name → 액션이 실행될 때 구별할 수 있는 이름
github.actor → 해당 액션을 트리거 한 사람
on → 필수 값으로 언제 액션이 실행될지를 정한다.
jobs → 필수 값으로, 해당 액션에서 실행할 잡을 의미함
브랜치 보호 규칙
무조건 성공해야하는 액션이 있다면 해당 레포에 Settings → code and automation → Branch로 들어가서
다음과 같이 설정하면 main 브랜치에는 액션이 성공하기 전까지 머지를 막을 수 있다!
'웹' 카테고리의 다른 글
[Next.js] 서버 컴포넌트 vs 클라이언트 컴포넌트 (2) | 2025.03.04 |
---|---|
React-Router-Dom 로더와 액션 (0) | 2025.02.26 |
[React] 리액트 개발 도구를 활용해 좋은 웹 어플리케이션 만들기 (0) | 2025.02.26 |
[React] SSR은 뭘까..? (0) | 2025.02.26 |
[React] useThrottle과 useDebounce에 대해서 알아보자 (0) | 2025.02.26 |