Nota: Actualmente los ejecutores hospedados en GitHub no se admiten en GitHub Enterprise Server. Puede ver más información sobre la compatibilidad futura planeada en GitHub public roadmap.
Introducción
Esta guía te muestra cómo crear un flujo de trabajo de integración continua (CI) que construye y prueba código Node.js. Si tus pruebas de CI se superan, es posible que desees implementar tu código o publicar un paquete.
Prerrequisitos
Te recomendamos que tengas una comprensión básica de Node.js, YAML, las opciones de configuración de flujo de trabajo y cómo crear un archivo de flujo de trabajo. Para más información, consulte:
Utilizar ejecutores auto-hospedados en GitHub Enterprise Server
Cuando use acciones de configuración, (como actions/setup-LANGUAGE
) en GitHub Enterprise Server con ejecutores autohospedados, es posible que necesite configurar la caché de herramientas en los ejecutores que no tienen acceso a Internet. Para obtener más información, vea «Configurar el caché de la herramienta en ejecutores auto-hospedados sin acceso a internet».
Utilizar el flujo de trabajo inicial de Node.js
GitHub proporciona un flujo de trabajo inicial de Node.js que funcionará para la mayoría de los proyectos de Node.js. Esta guía incluye ejemplos de Yarn y de npm que puedes utilizar para personalizar el flujo de trabajo inicial. Para más información, vea el flujo de trabajo de inicio de Node.js.
Los flujos de trabajo iniciales predeterminados son un punto de partida excelente para crear tu flujo de trabajo de prueba y de compilación y puedes personalizarlos de acuerdo con las necesidades de tu proyecto.
Para comenzar rápidamente, agregue el flujo de trabajo de inicio al directorio .github/workflows
del repositorio.
# El nombre del flujo de trabajo. GitHub muestra los nombres de los flujos de trabajo en la pestaña "Acciones" del repositorio. Si omite `name`, GitHub muestra la ruta de acceso del archivo de flujo de trabajo relativa a la raíz del repositorio. name: Node.js CI # This example workflow assumes that the default branch for your repository is `main`. If the default branch has a different name, edit this example and add your repository's default branch. on: push: branches: [ main ] pull_request: branches: [ main ] # jobs: build: # <!-- This is a YAML comment for use in annotated code examples. --> # Puede ejecutar este flujo de trabajo mediante otros sistemas operativos. # # El flujo de trabajo de inicio configura trabajos para que se ejecuten en Linux, mediante los ejecutores `ubuntu-latest` hospedados en GitHub. Puede cambiar la clave `runs-on` para ejecutar los trabajos en otro sistema operativo. # # Por ejemplo, puede utilizar los ejecutores de Windows hospedados en GitHub si especifica `runs-on: windows-latest`. O puede ejecutar los ejecutores de macOS hospedados en GitHub si utiliza `runs-on: macos-latest`. # # También puedes ejecutar jobs en contenedores de Docker, o puedes proporcionar un ejecutor auto-hospedado que se ejecute en tu propia infraestructura. Para obtener más información, vea «[AUTOTITLE](/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on)». runs-on: ubuntu-latest # This job uses a matrix strategy to run the job four times, once for each specified Node version. For more information, see "[AUTOTITLE](/actions/using-jobs/using-a-matrix-for-your-jobs)." strategy: matrix: node-version: [14.x, 16.x, 18.x, 20.x] # steps: # Este paso utiliza la acción `actions/checkout` para descargar una copia del repositorio en el ejecutor. - uses: actions/checkout@v4 # This step uses the `actions/setup-node` action to set up Node.js for each version indicated by the `matrix.node-version` key above. - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} # This step runs `npm ci` to install any dependencies listed in your `package.json` file. - run: npm ci # This step runs the `build` script if there is one specified under the `scripts` key in your `package.json` file. - run: npm run build --if-present # This step runs the `test` script that is specified under the `scripts` key in your `package.json` file. - run: npm test
name: Node.js CI
El nombre del flujo de trabajo. GitHub muestra los nombres de los flujos de trabajo en la pestaña "Acciones" del repositorio. Si omite name
, GitHub muestra la ruta de acceso del archivo de flujo de trabajo relativa a la raíz del repositorio.
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
This example workflow assumes that the default branch for your repository is main
. If the default branch has a different name, edit this example and add your repository's default branch.
jobs:
build:
runs-on: ubuntu-latest
Puede ejecutar este flujo de trabajo mediante otros sistemas operativos.
El flujo de trabajo de inicio configura trabajos para que se ejecuten en Linux, mediante los ejecutores ubuntu-latest
hospedados en GitHub. Puede cambiar la clave runs-on
para ejecutar los trabajos en otro sistema operativo.
Por ejemplo, puede utilizar los ejecutores de Windows hospedados en GitHub si especifica runs-on: windows-latest
. O puede ejecutar los ejecutores de macOS hospedados en GitHub si utiliza runs-on: macos-latest
.
También puedes ejecutar jobs en contenedores de Docker, o puedes proporcionar un ejecutor auto-hospedado que se ejecute en tu propia infraestructura. Para obtener más información, vea «Sintaxis del flujo de trabajo para Acciones de GitHub».
strategy:
matrix:
node-version: [14.x, 16.x, 18.x, 20.x]
This job uses a matrix strategy to run the job four times, once for each specified Node version. For more information, see "Uso de una matriz para tus trabajos."
steps:
- uses: actions/checkout@v4
Este paso utiliza la acción actions/checkout
para descargar una copia del repositorio en el ejecutor.
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
This step uses the actions/setup-node
action to set up Node.js for each version indicated by the matrix.node-version
key above.
- run: npm ci
This step runs npm ci
to install any dependencies listed in your package.json
file.
- run: npm run build --if-present
This step runs the build
script if there is one specified under the scripts
key in your package.json
file.
- run: npm test
This step runs the test
script that is specified under the scripts
key in your package.json
file.
# El nombre del flujo de trabajo. GitHub muestra los nombres de los flujos de trabajo en la pestaña "Acciones" del repositorio. Si omite `name`, GitHub muestra la ruta de acceso del archivo de flujo de trabajo relativa a la raíz del repositorio.
name: Node.js CI
# This example workflow assumes that the default branch for your repository is `main`. If the default branch has a different name, edit this example and add your repository's default branch.
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
#
jobs:
build:
# <!-- This is a YAML comment for use in annotated code examples. -->
# Puede ejecutar este flujo de trabajo mediante otros sistemas operativos.
#
# El flujo de trabajo de inicio configura trabajos para que se ejecuten en Linux, mediante los ejecutores `ubuntu-latest` hospedados en GitHub. Puede cambiar la clave `runs-on` para ejecutar los trabajos en otro sistema operativo.
#
# Por ejemplo, puede utilizar los ejecutores de Windows hospedados en GitHub si especifica `runs-on: windows-latest`. O puede ejecutar los ejecutores de macOS hospedados en GitHub si utiliza `runs-on: macos-latest`.
#
# También puedes ejecutar jobs en contenedores de Docker, o puedes proporcionar un ejecutor auto-hospedado que se ejecute en tu propia infraestructura. Para obtener más información, vea «[AUTOTITLE](/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on)».
runs-on: ubuntu-latest
# This job uses a matrix strategy to run the job four times, once for each specified Node version. For more information, see "[AUTOTITLE](/actions/using-jobs/using-a-matrix-for-your-jobs)."
strategy:
matrix:
node-version: [14.x, 16.x, 18.x, 20.x]
#
steps:
# Este paso utiliza la acción `actions/checkout` para descargar una copia del repositorio en el ejecutor.
- uses: actions/checkout@v4
# This step uses the `actions/setup-node` action to set up Node.js for each version indicated by the `matrix.node-version` key above.
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
# This step runs `npm ci` to install any dependencies listed in your `package.json` file.
- run: npm ci
# This step runs the `build` script if there is one specified under the `scripts` key in your `package.json` file.
- run: npm run build --if-present
# This step runs the `test` script that is specified under the `scripts` key in your `package.json` file.
- run: npm test
Especificar la versión de Node.js
La forma más fácil de especificar una versión de Node.js consiste en usar la acción setup-node
proporcionada por GitHub. Para más información, vea setup-node
.
La acción setup-node
toma una versión de Node.js como entrada y la configura en el ejecutor. La acción setup-node
busca una versión específica de Node.js en la caché de herramientas en cada ejecutor y agrega los archivos binarios necesarios a PATH
, que se conserva para el resto del trabajo. El uso de la acción setup-node
es la forma recomendada de utilizar Node.js con GitHub Actions, ya que garantiza el comportamiento coherente entre los distintos ejecutores y versiones de Node.js. Si va a usar un ejecutor autohospedado, debe instalar Node.js y agregarlo a PATH
.
El flujo de trabajo inicial incluye una estrategia de matriz que compila y prueba tu código con cuatro versiones de Node.js: 14.x, 16.x, 18.x y 20.x. La 'x' es un carácter comodín que coincide con el último lanzamiento menor y de parche disponible para una versión. Cada versión de Node.js que se especifica en la matriz node-version
crea un trabajo que ejecuta los mismos pasos.
Cada trabajo puede acceder al valor definido en la matriz node-version
de matrices mediante el contexto matrix
. La acción setup-node
usa el contexto como entrada node-version
. La acción setup-node
configura cada trabajo con una versión diferente de Node.js antes de compilar y probar el código. Para más información sobre las estrategias y contextos de matriz, consulta "Sintaxis del flujo de trabajo para Acciones de GitHub" y "Contextos".
strategy: matrix: node-version: [14.x, 16.x, 18.x, 20.x] steps: - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }}
strategy:
matrix:
node-version: [14.x, 16.x, 18.x, 20.x]
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
Como alternativa, puedes construir y probar con las versiones exactas de Node.js.
strategy: matrix: node-version: [10.17.0, 17.9.0]
strategy:
matrix:
node-version: [10.17.0, 17.9.0]
O bien, puedes construir y probar mediante una versión única de Node.js.
name: Node.js CI on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Use Node.js uses: actions/setup-node@v4 with: node-version: '18.x' - run: npm ci - run: npm run build --if-present - run: npm test
name: Node.js CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '18.x'
- run: npm ci
- run: npm run build --if-present
- run: npm test
Si no especificas una versión de Node.js, GitHub utiliza la versión de Node.js por defecto del entorno. Para más información, consulta "Using GitHub-hosted runners".
Instalación de dependencias
Los ejecutores alojados en GitHub tienen instalados administradores de dependencias de npm y Yarn. Puedes usar npm y Yarn para instalar dependencias en tu flujo de trabajo antes de construir y probar tu código. Los ejecutores Windows y Linux alojados en GitHub también tienen instalado Grunt, Gulp y Bower.
También puedes almacenar en caché las dependencias para acelerar el flujo de trabajo. Para obtener más información, consulta "Almacenar en caché las dependencias para agilizar los flujos de trabajo".
Ejemplo con npm
En este ejemplo se instalan las versiones del archivo package-lock.json o npm-shrinkwrap.json, y evita las actualizaciones del archivo de bloqueo. El uso de npm ci
suele ser más rápido que la ejecución de npm install
. Para más información, vea npm ci
e "Introducción de npm ci
para compilaciones más rápidas y confiables".
steps: - uses: actions/checkout@v4 - name: Use Node.js uses: actions/setup-node@v4 with: node-version: '18.x' - name: Install dependencies run: npm ci
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '18.x'
- name: Install dependencies
run: npm ci
Con npm install
, se instalan las dependencias definidas en el archivo package.json. Para más información, vea npm install
.
steps: - uses: actions/checkout@v4 - name: Use Node.js uses: actions/setup-node@v4 with: node-version: '18.x' - name: Install dependencies run: npm install
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '18.x'
- name: Install dependencies
run: npm install
Ejemplo con Yarn
En este ejemplo se instalan las dependencias definidas en el archivo yarn.lock y se impide que se actualicen al archivo yarn.lock. Para más información, vea yarn install
.
steps: - uses: actions/checkout@v4 - name: Use Node.js uses: actions/setup-node@v4 with: node-version: '18.x' - name: Install dependencies run: yarn --frozen-lockfile
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '18.x'
- name: Install dependencies
run: yarn --frozen-lockfile
Como alternativa, puedes instalar las dependencias definidas en el archivo package.json.
steps: - uses: actions/checkout@v4 - name: Use Node.js uses: actions/setup-node@v4 with: node-version: '18.x' - name: Install dependencies run: yarn
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '18.x'
- name: Install dependencies
run: yarn
Ejemplo de uso de un registro privado y la creación del archivo .npmrc
Puede usar la acción setup-node
para crear un archivo .npmrc local en el ejecutor que configure el registro y el ámbito predeterminados. La acción setup-node
también acepta un token de autenticación como entrada, que se usa para acceder a los registros privados o publicar paquetes de nodos. Para más información, vea setup-node
.
Para autenticar tu registro privado, necesitarás almacenar tu token de autenticación de npm como un secreto. Por ejemplo, cree un secreto de repositorio denominado NPM_TOKEN
. Para obtener más información, vea «Using secrets in GitHub Actions».
En el ejemplo siguiente, el secreto NPM_TOKEN
almacena el token de autenticación de npm. La acción setup-node
configura el archivo .npmrc para leer el token de autenticación de npm de la variable de entorno NODE_AUTH_TOKEN
. Al usar la acción setup-node
para crear un archivo .npmrc, debe establecer la variable de entorno NODE_AUTH_TOKEN
con el secreto que contiene el token de autenticación de npm.
Antes de instalar las dependencias, use la acción setup-node
para crear el archivo .npmrc. La acción tiene dos parámetros de entrada. El parámetro node-version
establece la versión de Node.js y el parámetro registry-url
establece el registro predeterminado. Si en el registro de paquetes se utilizan ámbitos, debe usar el parámetro scope
. Para más información, vea npm-scope
.
steps: - uses: actions/checkout@v4 - name: Use Node.js uses: actions/setup-node@v4 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 }}
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
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 }}
En el ejemplo anterior se crea un archivo .npmrc con el contenido siguiente:
//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}
@octocat:registry=https://registry.npmjs.org/
always-auth=true
Ejemplo de dependencias en caché
Puedes almacenar en caché y restaurar las dependencias mediante la acción setup-node
.
El siguiente ejemplo guarda las dependencias en caché para npm.
steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '14' cache: 'npm' - run: npm install - run: npm test
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '14'
cache: 'npm'
- run: npm install
- run: npm test
El siguiente ejemplo guarda las dependencias en caché para Yarn.
steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '14' cache: 'yarn' - run: yarn - run: yarn test
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '14'
cache: 'yarn'
- run: yarn
- run: yarn test
El siguiente ejemplo guarda las dependencias en caché para pnpm (v6.10+).
# Este flujo de trabajo usa acciones que no GitHub no certifica. # Estas las proporcionan entidades terceras y las gobiernan # condiciones de servicio, políticas de privacidad y documentación de soporte # en línea. # NOTE: pnpm caching support requires pnpm version >= 6.10.0 steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@0609f0983b7a228f052f81ef4c3d6510cae254ad with: version: 6.10.0 - uses: actions/setup-node@v4 with: node-version: '14' cache: 'pnpm' - run: pnpm install - run: pnpm test
# Este flujo de trabajo usa acciones que no GitHub no certifica.
# Estas las proporcionan entidades terceras y las gobiernan
# condiciones de servicio, políticas de privacidad y documentación de soporte
# en línea.
# NOTE: pnpm caching support requires pnpm version >= 6.10.0
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@0609f0983b7a228f052f81ef4c3d6510cae254ad
with:
version: 6.10.0
- uses: actions/setup-node@v4
with:
node-version: '14'
cache: 'pnpm'
- run: pnpm install
- run: pnpm test
Si tiene una necesidad específica o necesita controles más precisos para el almacenamiento en caché, puede usar la acción cache
. Para obtener más información, vea «Almacenar en caché las dependencias para agilizar los flujos de trabajo».
Construir y probar tu código
Puedes usar los mismos comandos que usas de forma local para construir y probar tu código. Por ejemplo, si ejecuta npm run build
para ejecutar los pasos de compilación definidos en el archivo package.json y npm test
para ejecutar el conjunto de pruebas, tendría que agregar esos comandos en el archivo de flujo de trabajo.
steps: - uses: actions/checkout@v4 - name: Use Node.js uses: actions/setup-node@v4 with: node-version: '18.x' - run: npm install - run: npm run build --if-present - run: npm test
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '18.x'
- run: npm install
- run: npm run build --if-present
- run: npm test
Empaquetar datos de flujo de trabajo como artefactos
Puedes guardar los artefactos de tus pasos de construcción y prueba para verlos después de que se complete un trabajo. Por ejemplo, es posible que debas guardar los archivos de registro, los vaciados de memoria, los resultados de las pruebas o las capturas de pantalla. Para obtener más información, vea «Almacenar los datos de los flujos de trabajo como artefactos».
Publicar en registros de paquetes
Puedes configurar tu flujo de trabajo para que publique tu paquete Node.js en un registro de paquete después de que se aprueben tus pruebas de CI. Para más información sobre la publicación en npm y GitHub Packages consulta "Publicar paquetes Node.js".