유명한 담벼락

CI를 위한 GitHub Action 설정하기

by 담담이담

CI, CD가 궁금하다면 아래의 영상을 먼저 참고하길 바란다.

 

CI - 지속적인 통합을 의미

 

이는 메인 레포에 새롭게 추가되는 코드들을

CI Server에서 자동으로 빌드하고 테스트하는 과정을 통해 이뤄진다.

 

vercel로 배포를 한다면, 자동으로 CI/CD가 가능하지만, 

매 번 vercel 계정에 접속해서 보는 것보다 github action을 활용하면

프로젝트에 참여하는 팀원들 모두가 손쉽게 볼 수 있다.

 

 

.github/workflows/ci.yml

name: ci

on: [push, pull_request]

jobs:
  run-lint:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: Cache node modules
        uses: actions/cache@v3
        id: cache
        with:
          path: node_modules
          key: npm-packages-${{ hashFiles('**/package-lock.json') }}

      - name: Install the project dependencies
        if: steps.cache.outputs.cache-hit == false
        run: npm ci

      - name: Build
        run: npm run build

      - name: action-discord
        uses: sarisia/actions-status-discord@v1
        if: failure()
        with:
          webhook: ${{ secrets.DISCORD_WEBHOOK }}
          content: '<@&1192747539124977736> ${{ github.actor }} 확인해주세요! ( っ •‌ᜊ•‌ )う'
          title: ❗️ failed ❗️
          color: FF0000
          username: GitHub Actions

      - run: echo '${{github.actor}}님 에러 확인 확인해주세요 ( っ •‌ᜊ•‌ )う'

 


1. on: [push, pull_request]: 해당 코드가 푸시되거나 풀 리퀘스트를 받았을 때 실행됨을 의미한다.

 

2. jobs: GitHub Actions의 핵심 요소로, 작업을 정의한다.

 

   a. run-lint: 작업의 이름으로, 코드 린트(lint) 및 빌드와 관련된 단계들을 실행한다.


   b .runs-on: ubuntu-latest: Ubuntu 최신 버전에서 작업을 실행한다.


   c. steps: 작업의 각 단계를 정의한다.

 

      - Checkout: 리포지토리를 체크아웃한다.      
      - Set up Node.js: Node.js를 설정한다.
      - Cache node modules: Node 모듈을 캐싱하여 성능을 향상시킨다.
      - Install the project dependencies: 캐시가 적용되지 않았을 경우에만 프로젝트 의존성을 설치한다.

      - Build: 프로젝트를 빌드한다.
      - action-discord: 작업이 실패한 경우에만 실행되며, Discord에 알림을 보낸다. 

      - run: 에러 메시지를 출력한다.

 

- 캐싱이 안됐을 때만 의존성을 설치하는 이유는?

캐싱은 이전에 설치된 의존성을 재사용함으로써

시간을 절약하는 데 도움을 주는 메커니즘이다.

 따라서 캐시된 의존성이 이미 존재하는 경우에는 새로운 설치가 필요하지 않다.

 이는 빌드 프로세스가 더 빨리 완료되도록 도와준다.

여기서의 조건문 `if: steps.cache.outputs.cache-hit == false`는

캐시가 적중하지 않은 경우

즉, 이전에 캐시된 의존성이 없거나 업데이트된 경우에만 해당 블록을 실행하도록 한다.

 

 

참고 영상 : 

https://www.youtube.com/watch?v=iLqGzEkusIw&t=3s

https://www.youtube.com/watch?v=0Emq5FypiMM

 

블로그의 정보

유명한 담벼락

담담이담

활동하기