참고: GitHub 호스트 실행기는 현재 GitHub Enterprise Server에서 지원되지 않습니다. GitHub public roadmap에 예정된 향후 지원에 대해 자세히 알아볼 수 있습니다.
소개
이 가이드에서는 Node.js 코드를 빌드하고 테스트하는 CI(연속 통합) 워크플로를 만드는 방법을 보여 줍니다. CI 테스트에 통과하면 코드를 배포하거나 패키지를 게시할 수 있습니다.
필수 조건
Node.js, YAML, 워크플로 구성 옵션과 워크플로 파일을 만드는 방법을 기본적으로 이해하는 것이 좋습니다. 자세한 내용은 다음을 참조하세요.
GitHub Enterprise Server에서 자체 호스팅 실행기 사용
실행기를 자체 호스팅하는 GitHub Enterprise Server에서 actions/setup-LANGUAGE
같은 설정 작업을 사용할 경우 인터넷에 액세스할 수 없는 실행기에서 도구 캐시를 설정해야 할 수 있습니다. 자세한 내용은 "인터넷에 액세스할 수 없는 자체 호스팅 실행기에서 도구 캐시 설정"을 참조하세요.
Node.js 시작 워크플로 사용
GitHub는 대부분의 Node.js 기반 Java 프로젝트에서 작동하는 Node.js 시작 워크플로를 제공합니다. 이 가이드에는 시작 워크플로를 사용자 지정하는 데 사용할 수 있는 npm 및 Yarn 예제가 포함되어 있습니다. 자세한 내용은 Node.js 시작 워크플로를 참조하세요.
빠르게 시작하려면 시작 워크플로를 리포지토리의 .github/workflows
디렉터리에 추가합니다. 아래에 표시된 워크플로는 리포지토리의 기본 분기가 main
이라고 가정합니다.
name: Node.js CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14.x, 16.x, 18.x, 20.x]
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
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 버전(14.x, 16.x, 18.x 및 20.x)으로 코드를 빌드하고 테스트하는 행렬 전략이 포함되어 있습니다. ‘x’는 버전에 사용할 수 있는 최신 부 버전 및 패치 릴리스와 일치하는 와일드카드 문자입니다. node-version
배열에 지정된 Node.js의 각 버전은 동일한 단계를 실행하는 작업을 만듭니다.
각 작업은 matrix
컨텍스트를 사용하여 매트릭스 node-version
배열에 정의된 값에 액세스할 수 있습니다. setup-node
작업은 컨텍스트를 node-version
입력으로 사용합니다. setup-node
작업은 코드를 빌드하고 테스트하기 전에 다른 Node.js 버전으로 각 작업을 구성합니다. 행렬 전략 및 컨텍스트에 대한 자세한 내용은 "GitHub Actions에 대한 워크플로 구문" 및 "컨텍스트"을 참조하세요.
strategy:
matrix:
node-version: [14.x, 16.x, 18.x, 20.x]
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
또는 정확한 Node.js 버전으로 빌드하고 테스트할 수 있습니다.
strategy:
matrix:
node-version: [10.17.0, 17.9.0]
단일 버전의 Node.js를 사용하여 빌드하고 테스트할 수도 있습니다.
name: Node.js CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Use Node.js
uses: actions/setup-node@v2
with:
node-version: '18.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
를 참조하세요.
steps:
- uses: actions/checkout@v2
- name: Use Node.js
uses: actions/setup-node@v2
with:
node-version: '18.x'
- name: Install dependencies
run: npm install
npm ci
를 사용하면 package-lock.json 또는 npm-shrinkwrap.json 파일에 버전이 설치되고 잠금 파일이 업데이트되지 않습니다. 일반적으로 npm ci
를 사용하는 것이 npm install
을 실행하는 것보다 빠릅니다. 자세한 내용은 npm ci
및 “더 빠르고 안정적인 빌드를 위한 npm ci
소개”를 참조하세요.
steps:
- uses: actions/checkout@v2
- name: Use Node.js
uses: actions/setup-node@v2
with:
node-version: '18.x'
- name: Install dependencies
run: npm ci
Yarn을 사용한 예제
이 예제에서는 package.json 파일에 정의된 종속성을 설치합니다. 자세한 내용은 yarn install
를 참조하세요.
steps:
- uses: actions/checkout@v2
- name: Use Node.js
uses: actions/setup-node@v2
with:
node-version: '18.x'
- name: Install dependencies
run: yarn
또는 --frozen-lockfile
을 전달하여 yarn.lock
파일에 버전을 설치하고 yarn.lock
파일이 업데이트되지 않습니다.
steps:
- uses: actions/checkout@v2
- name: Use Node.js
uses: actions/setup-node@v2
with:
node-version: '18.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
를 참조하세요.
steps:
- uses: actions/checkout@v2
- name: Use Node.js
uses: actions/setup-node@v2
with:
always-auth: true
node-version: '18.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
코드 빌드 및 테스트
코드를 빌드하고 테스트하기 위해 로컬에서 사용하는 것과 동일한 명령을 사용할 수 있습니다. 예를 들어 npm run build
를 실행하여 package.json 파일에 정의된 빌드 단계를 실행하고 npm test
를 실행하여 테스트 모음을 실행하는 경우 워크플로 파일에 해당 명령을 추가합니다.
steps:
- uses: actions/checkout@v2
- name: Use Node.js
uses: actions/setup-node@v2
with:
node-version: '18.x'
- run: npm install
- run: npm run build --if-present
- run: npm test
워크플로 데이터를 아티팩트로 패키지
빌드 및 테스트 단계에서 아티팩트를 저장하여 작업이 완료된 후 볼 수 있습니다. 예를 들어 로그 파일, 코어 덤프, 테스트 결과 또는 스크린샷을 저장해야 할 수 있습니다. 자세한 내용은 "워크플로 데이터를 아티팩트로 저장"을 참조하세요.
패키지 레지스트리에 게시
CI 테스트에 통과하면 Node.js 패키지를 패키지 레지스트리에 게시하도록 워크플로를 구성할 수 있습니다. npm 및 GitHub Packages에 게시하는 방법에 대한 자세한 내용은 "Node.js 패키지 게시.