Skip to main content

Node.js 빌드 및 테스트

CI(연속 통합) 워크플로를 만들어 Node.js 프로젝트를 빌드하고 테스트할 수 있습니다.

소개

이 가이드에서는 Node.js 코드를 빌드하고 테스트하는 CI(연속 통합) 워크플로를 만드는 방법을 보여 줍니다. CI 테스트에 통과하면 코드를 배포하거나 패키지를 게시할 수 있습니다.

필수 조건

Node.js, YAML, 워크플로 구성 옵션과 워크플로 파일을 만드는 방법을 기본적으로 이해하는 것이 좋습니다. 자세한 내용은 다음을 참조하세요.

Node.js 시작 워크플로 사용

GitHub는 대부분의 Node.js 기반 Java 프로젝트에서 작동하는 Node.js 시작 워크플로를 제공합니다. 이 가이드에는 시작 워크플로를 사용자 지정하는 데 사용할 수 있는 npm 및 Yarn 예제가 포함되어 있습니다. 자세한 내용은 Node.js 시작 워크플로를 참조하세요.

빠르게 시작하려면 시작 워크플로를 리포지토리의 .github/workflows 디렉터리에 추가합니다. 아래에 표시된 워크플로는 리포지토리의 기본 분기가 main이라고 가정합니다.

YAML
name: Node.js CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [10.x, 12.x, 14.x, 15.x]

    steps:
      - uses: actions/checkout@v3
      - 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-호스팅된 ubuntu-latest 실행기를 사용하여 Linux에서 실행되도록 작업을 구성합니다. runs-on 키를 변경하여 다른 운영 체제에서 작업을 실행할 수 있습니다. 예를 들어 GitHub-호스팅된 Windows 실행기를 사용할 수 있습니다.

runs-on: windows-latest

또는 GitHub-호스팅된 macOS 실행기에서 실행할 수 있습니다.

runs-on: macos-latest

Docker 컨테이너에서 작업을 실행하거나 자체 인프라에서 실행되는 자체 호스팅 실행기를 제공할 수도 있습니다. 자세한 내용은 “GitHub Actions에 대한 워크플로 구문”을 참조하세요.

Node.js 버전 지정

Node.js 버전을 지정하는 가장 쉬운 방법은 GitHub에서 제공하는 setup-node 작업을 사용하는 것입니다. 자세한 내용은 setup-node를 참조하세요.

setup-node 작업은 Node.js 버전을 입력으로 사용하고 실행기에서 해당 버전을 구성합니다. setup-node 작업은 각 실행기의 도구 캐시에서 Node.js의 특정 버전을 찾아 필수 이진 파일을 PATH에 추가합니다. 이 이진 파일은 나머지 작업 동안 유지됩니다. setup-node 작업을 사용하는 것은 다양한 실행기 및 Node.js 버전 간에 일관된 동작을 보장하므로 GitHub Actions로 Node.js를 사용하는 데 권장되는 방법입니다. 자체 호스트 실행기를 사용하는 경우 Node.js를 설치하고 이를 PATH에 추가해야 합니다.

시작 워크플로에는 4가지 Node.js 버전(10.x, 12.x, 14.x, 15.x)으로 코드를 빌드하고 테스트하는 매트릭스 전략이 포함되어 있습니다. ‘x’는 버전에 사용할 수 있는 최신 부 버전 및 패치 릴리스와 일치하는 와일드카드 문자입니다. node-version 배열에 지정된 Node.js의 각 버전은 동일한 단계를 실행하는 작업을 만듭니다.

각 작업은 matrix 컨텍스트를 사용하여 매트릭스 node-version 배열에 정의된 값에 액세스할 수 있습니다. setup-node 작업은 컨텍스트를 node-version 입력으로 사용합니다. setup-node 작업은 코드를 빌드하고 테스트하기 전에 다른 Node.js 버전으로 각 작업을 구성합니다. 매트릭스 전략 및 컨텍스트에 대한 자세한 내용은 “GitHub Actions에 대한 워크플로 구문” 및 “컨텍스트”를 참조하세요.

YAML
strategy:
  matrix:
    node-version: [10.x, 12.x, 14.x, 15.x]

steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
  uses: actions/setup-node@v3
  with:
    node-version: ${{ matrix.node-version }}

또는 정확한 Node.js 버전으로 빌드하고 테스트할 수 있습니다.

YAML
strategy:
  matrix:
    node-version: [8.16.2, 10.17.0]

단일 버전의 Node.js를 사용하여 빌드하고 테스트할 수도 있습니다.

YAML
name: Node.js CI

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - name: Use Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '12.x'
      - run: npm ci
      - run: npm run build --if-present
      - run: npm test

Node.js 버전을 지정하지 않으면 GitHub에서 환경의 기본 Node.js 버전을 사용합니다. 자세한 내용은 “ GitHub 호스트 실행기 사양”을 참조하세요.

종속성 설치

GitHub 호스트 실행기에는 npm 및 Yarn 종속성 관리자가 설치되어 있습니다. 코드를 빌드하고 테스트하기 전에 npm 및 Yarn을 사용하여 워크플로에 종속성을 설치할 수 있습니다. Windows 및 Linux GitHub호스트 실행기에도 Grunt, Gulp, Bower가 설치되어 있습니다.

종속성을 캐시하여 워크플로 속도를 높일 수도 있습니다. 자세한 내용은 “워크플로 속도를 높이기 위한 종속성 캐싱”을 참조하세요.

npm을 사용한 예제

이 예제에서는 package.json 파일에 정의된 종속성을 설치합니다. 자세한 내용은 npm install를 참조하세요.

YAML
steps:
- uses: actions/checkout@v3
- name: Use Node.js
  uses: actions/setup-node@v3
  with:
    node-version: '12.x'
- name: Install dependencies
  run: npm install

npm ci를 사용하면 package-lock.json 또는 npm-shrinkwrap.json 파일에 버전이 설치되고 잠금 파일이 업데이트되지 않습니다. 일반적으로 npm ci를 사용하는 것이 npm install을 실행하는 것보다 빠릅니다. 자세한 내용은 npm ci 및 “더 빠르고 안정적인 빌드를 위한 npm ci 소개”를 참조하세요.

YAML
steps:
- uses: actions/checkout@v3
- name: Use Node.js
  uses: actions/setup-node@v3
  with:
    node-version: '12.x'
- name: Install dependencies
  run: npm ci

Yarn을 사용한 예제

이 예제에서는 package.json 파일에 정의된 종속성을 설치합니다. 자세한 내용은 yarn install를 참조하세요.

YAML
steps:
- uses: actions/checkout@v3
- name: Use Node.js
  uses: actions/setup-node@v3
  with:
    node-version: '12.x'
- name: Install dependencies
  run: yarn

또는 --frozen-lockfile을 전달하여 yarn.lock 파일에 버전을 설치하고 yarn.lock 파일이 업데이트되지 않습니다.

YAML
steps:
- uses: actions/checkout@v3
- name: Use Node.js
  uses: actions/setup-node@v3
  with:
    node-version: '12.x'
- name: Install dependencies
  run: yarn --frozen-lockfile

프라이빗 레지스트리를 사용하고 .npmrc 파일을 만드는 예제

setup-node 작업을 사용하여 기본 레지스트리 및 범위를 구성하는 실행기에서 로컬 .npmrc 파일을 만들 수 있습니다. 또한 setup-node 작업은 프라이빗 레지스트리에 액세스하거나 노드 패키지를 게시하는 데 사용되는 입력으로 인증 토큰을 허용합니다. 자세한 내용은 setup-node을(를) 참조하세요.

프라이빗 레지스트리에 인증하려면 npm 인증 토큰을 비밀로 저장해야 합니다. 예를 들어 NPM_TOKEN이라는 레지스트리 비밀을 만듭니다. 자세한 내용은 “암호화된 비밀 만들기 및 사용”을 참조하세요.

아래 예제에서 비밀 NPM_TOKEN은 npm 인증 토큰을 저장합니다. setup-node 작업은 NODE_AUTH_TOKEN 환경 변수에서 npm 인증 토큰을 읽도록 .npmrc 파일을 구성합니다. setup-node 작업을 사용하여 .npmrc 파일을 만들 때 npm 인증 토큰이 포함된 비밀로 NODE_AUTH_TOKEN 환경 변수를 설정해야 합니다.

종속성을 설치하기 전에 setup-node 작업을 사용하여 .npmrc 파일을 만듭니다. 작업에는 두 개의 입력 매개 변수가 있습니다. node-version 매개 변수는 Node.js 버전을 설정하고 registry-url 매개 변수는 기본 레지스트리를 설정합니다. 패키지 레지스트리에서 범위를 사용하는 경우 scope 매개 변수를 사용해야 합니다. 자세한 내용은 npm-scope를 참조하세요.

YAML
steps:
- uses: actions/checkout@v3
- name: Use Node.js
  uses: actions/setup-node@v3
  with:
    always-auth: true
    node-version: '12.x'
    registry-url: https://registry.npmjs.org
    scope: '@octocat'
- name: Install dependencies
  run: npm ci
  env:
    NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

위의 예제에서는 다음 콘텐츠가 포함된 .npmrc 파일을 만듭니다.

//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}
@octocat:registry=https://registry.npmjs.org/
always-auth=true

종속성 캐싱 예제

setup-node작업을 사용하여 종속성을 캐시하고 복원할 수 있습니다.

다음 예제에서는 npm에 대한 종속성을 캐시합니다.

YAML
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
  with:
    node-version: '14'
    cache: 'npm'
- run: npm install
- run: npm test

다음 예제에서는 Yarn에 대한 종속성을 캐시합니다.

YAML
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
  with:
    node-version: '14'
    cache: 'yarn'
- run: yarn
- run: yarn test

다음 예제에서는 pnpm(v6.10 이상)에 대한 종속성을 캐시합니다.

YAML
# <a name="this-workflow-uses-actions-that-are-not-certified-by-github"></a>이 워크플로는 GitHub에서 인증되지 않은 작업을 사용합니다.
# <a name="they-are-provided-by-a-third-party-and-are-governed-by"></a>작업은 타사에서 제공하며
# <a name="separate-terms-of-service-privacy-policy-and-support"></a>별도의 서비스 약관, 개인정보처리방침, 지원 설명서에서 규정됩니다.
# <a name="documentation"></a>참조하세요.

# NOTE: pnpm caching support requires pnpm version >= 6.10.0

steps:
- uses: actions/checkout@v3
- uses: pnpm/action-setup@646cdf48217256a3d0b80361c5a50727664284f2
  with:
    version: 6.10.0
- uses: actions/setup-node@v3
  with:
    node-version: '14'
    cache: 'pnpm'
- run: pnpm install
- run: pnpm test

사용자 지정 요구사항이 있거나 캐싱에 대한 세부적인 제어가 필요한 경우 cache 작업을 사용할 수 있습니다. 자세한 내용은 “워크플로 속도를 높이기 위한 종속성 캐싱”을 참조하세요.

코드 빌드 및 테스트

코드를 빌드하고 테스트하기 위해 로컬에서 사용하는 것과 동일한 명령을 사용할 수 있습니다. 예를 들어 npm run build를 실행하여 package.json 파일에 정의된 빌드 단계를 실행하고 npm test를 실행하여 테스트 모음을 실행하는 경우 워크플로 파일에 해당 명령을 추가합니다.

YAML
steps:
- uses: actions/checkout@v3
- name: Use Node.js
  uses: actions/setup-node@v3
  with:
    node-version: '12.x'
- run: npm install
- run: npm run build --if-present
- run: npm test

워크플로 데이터를 아티팩트로 패키지

빌드 및 테스트 단계에서 아티팩트를 저장하여 작업이 완료된 후 볼 수 있습니다. 예를 들어 로그 파일, 코어 덤프, 테스트 결과 또는 스크린샷을 저장해야 할 수 있습니다. 자세한 내용은 “아티팩트를 사용하여 워크플로 데이터 유지”를 참조하세요.

패키지 레지스트리에 게시

CI 테스트에 통과하면 Node.js 패키지를 패키지 레지스트리에 게시하도록 워크플로를 구성할 수 있습니다. npm 및 GitHub Packages에 게시하는 방법에 대한 자세한 내용은 “Node.js 패키지 게시”를 참조하세요.