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
'프로젝트' 카테고리의 다른 글
리액트에서 파일 첨부하기 - File input 숨기고, 버튼으로 대체하는 방법과 프리뷰까지! (0) | 2024.05.06 |
---|---|
eslint-plugin-prettier를 삭제한 이유(feat. delete enter, delete cr 에러) (1) | 2024.01.26 |
NextJS 프로젝트 초기 설정 (feat 리액트 쿼리, 리덕스, 타입스크립트) (0) | 2024.01.20 |
nvm과 npm 그리고 npx의 차이 (0) | 2024.01.19 |
Component definition is missing display name 에러 (0) | 2024.01.06 |
블로그의 정보
유명한 담벼락
담담이담