注: GitHub 托管的运行器目前在 GitHub Enterprise Server 上不受支持。 您可以在 GitHub 公共路线图 上查看有关未来支持计划的更多信息。
简介
本指南介绍如何创建用来生成和测试 Node.js 代� �的持续集成 (CI) 工作流程。 如果 CI 测试通过,您可能想要部署代� �或发布包。
基本要求
建议基本了解 Node.js、YAML、工作流程配置选项以及如何创建工作流程文件。 更多信息请参阅:
在 GitHub Enterprise Server 上使用自托管的运行器
在包含自托管运行器的 GitHub Enterprise Server 上使用设置操作(例如 actions/setup-LANGUAGE
)时,您可能需要在没有连接互联网的运行器上设置工具缓存。 更多信息请参阅“在没有互联网连接的自托管运行器上设置工具缓存”。
Using the Node.js starter workflow
GitHub provides a Node.js starter workflow that will work for most Node.js projects. This guide includes npm and Yarn examples that you can use to customize the starter workflow. For more information, see the Node.js starter workflow.
To get started quickly, add the starter workflow to the .github/workflows
directory of your repository. 下面显示的工作流假定仓库的默认分支是 main
。
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@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
在其他操作系统上运行
The starter workflow configures jobs to run on Linux, using the GitHub-hosted ubuntu-latest
runners. 您可以更改 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
。
The starter workflow includes a matrix strategy that builds and tests your code with four Node.js versions: 10.x, 12.x, 14.x, and 15.x. "x" 是一个通配符,与版本的最新次要版本和修补程序版本匹配。 node-version
阵列中指定的每个 Node.js 版本都会创建一个运行相同步骤的作业。
每个作业都可以使用 matrix
上下文访问矩阵 node-version
阵列中定义的值。 setup-node
操作使用上下文作为 node-version
输入。 setup-node
操作在构建和测试代� �之前使用不同的 Node.js 版本配置每个作业。 For more information about matrix strategies and contexts, see "Workflow syntax for GitHub Actions" and "Contexts."
strategy:
matrix:
node-version: [10.x, 12.x, 14.x, 15.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: [8.16.2, 10.17.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: '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。
使用 GitHub 托管的运行器时,您还可以缓存依赖项以� 速工作流程。 更多信息请参阅“缓存依赖项以� 快工作流程”。
使用 npm 的示例
此示例安装 package.json 文件中定义的依赖项。 更多信息请参阅 npm install
。
steps:
- uses: actions/checkout@v2
- name: Use Node.js
uses: actions/setup-node@v2
with:
node-version: '12.x'
- name: Install dependencies
run: npm install
使用 npm ci
将版本安装到 package-lock.json 或 npm-shrinkwraw.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: '12.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: '12.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: '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
操作配置 .npmrc 文件从 NODE_AUTH_TOKEN
环境变量读取 npm 身份验证令牌。 使用 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: '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
缓存依赖项示例
使用 GitHub 托管的运行器时,您可以使用 setup-node
操作缓存和恢复依赖项。
以下示例缓存 npm 的依赖项。
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '14'
cache: 'npm'
- run: npm install
- run: npm test
以下示例缓存 Yarn 的依赖项。
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '14'
cache: 'yarn'
- run: yarn
- run: yarn test
以下示例缓存 pnpm (v6.10+) 的依赖项。
# 此工作流使用未经 GitHub 认证的操作。
# 它们由第三方提供,并受
# 单独的服务条款、隐私政策和支持
# 文档管理。
# NOTE: pnpm caching support requires pnpm version >= 6.10.0
steps:
- uses: actions/checkout@v2
- uses: pnpm/action-setup@646cdf48217256a3d0b80361c5a50727664284f2
with:
version: 6.10.0
- uses: actions/setup-node@v2
with:
node-version: '14'
cache: 'pnpm'
- run: pnpm install
- run: pnpm test
If you have a custom requirement or need finer controls for caching, you can use the cache
action. 更多信息请参阅“缓存依赖项以� 快工作流程”。
构建和测试代� �
您可以使用与本地相同的命令来构建和测试代� �。 例如,如果您运行 npm run build
来运行 package.json 文件中定义的构建步骤,运行 npm test
来运行测试套件,则要在工作流程文件中添� 以下命令。
steps:
- uses: actions/checkout@v2
- name: Use Node.js
uses: actions/setup-node@v2
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 包”。