Compilación, prueba e implementación de javaScript Node.js aplicaciones

Azure Pipelines | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018 | TFS 2017

Use una canalización para compilar y probar JavaScript Node.js aplicaciones y, a continuación, implementar o publicar en destinos. Obtenga información sobre cómo:

Nota

En Microsoft Team Foundation Server (TFS) 2018 y versiones anteriores, las canalizaciones de compilación y versión se denominan definiciones, las ejecuciones se denominan compilaciones, las conexiones de servicio se denominan puntos de conexión de servicio, las fases se denominan entornos y los trabajos se denominan fases.

Nota

Esta guía se aplica a Team Foundation Server (TFS) versión 2017.3 y versiones más recientes.

Cree su primera canalización

¿No está Azure Pipelines? Si es así, se recomienda probar esta sección para crearla antes de pasar a otras secciones.

Bifurcar este repositorio en GitHub:

https://github.com/Azure-Samples/js-e2e-express-server

Inicio de sesión en Azure Pipelines

Inicie sesión en Azure Pipelines. Una vez que haya iniciado sesión, el explorador accederá a https://dev.azure.com/my-organization-name y aparecerá el panel de Azure DevOps.

En la organización seleccionada, cree un proyecto. Si no tiene ningún proyecto en la organización, aparecerá la pantalla Cree un proyecto para empezar. De lo contrario, seleccione el botón Crear proyecto en la esquina superior derecha del panel.

Creación de la canalización

  1. Para empezar, bifurca este repositorio en GitHub.

    https://github.com/Azure-Samples/js-e2e-express-server
    
  2. Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.

  3. En el proyecto, vaya a la página Pipelines (Canalizaciones). A continuación, elija la acción para crear una canalización.

  4. Siga los pasos del asistente y seleccione primero GitHub como ubicación del código fuente.

  5. Puede que se le redirija a GitHub para iniciar sesión. Si es así, escriba sus credenciales de GitHub.

  6. Cuando aparezca la lista de repositorios, seleccione el Node.js de ejemplo.

  7. Azure Pipelines analizará el código del repositorio y recomendará Node.js la plantilla para la canalización. Seleccione esa plantilla.

  8. Azure Pipelines generará un archivo YAML para la canalización. Seleccione Save and run (Guardar y ejecutar) y, luego, seleccione Commit directly to the main branch (Confirmar directamente en la rama principal) y, luego, elija de nuevo Save and run (Guardar y ejecutar).

  9. Se inicia una nueva ejecución. Espere a que finalice.

Cuando haya terminado, tendrá un archivo YAML en funcionamiento ( ) en el repositorio que está listo azure-pipelines.yml para personalizar.

Sugerencia

Para realizar cambios en el archivo YAML como se describe en este tema, seleccione la canalización en la página Pipelines y, a continuación, edite el archivo.

YAML

  1. Para empezar, bifurca este repositorio en GitHub.

    https://github.com/Azure-Samples/js-e2e-express-server
    
  2. Agregue un azure-pipelines.yml archivo en el repositorio. En este yaml se supone que Node.js con npm instalado en el servidor.

trigger:
- main

pool: Default

- script: |
    npm install
    npm run build
  displayName: 'npm install and build'
  1. Cree una canalización (si no sabe cómo, consulte Creación de la primera canalización)y, para la plantilla, seleccione YAML.

  2. Establezca el grupo de agentes y la ruta de acceso del archivo YAML para la canalización.

  3. Guarde la canalización y poner en cola una compilación. Cuando aparezca el mensaje Build #nnnnnnnn.n se ha puesto en cola, seleccione el vínculo number para ver la canalización en acción.

  4. Cuando esté listo para realizar cambios en la canalización, edite la canalización.

  5. Consulte las secciones siguientes para obtener información sobre algunas de las formas más comunes de personalizar la canalización.

Clásico

  1. Para empezar, bifurca este repositorio en GitHub.

    https://github.com/Azure-Samples/js-e2e-express-server
    
  2. Una vez que tenga el código de ejemplo en su propio repositorio, cree una canalización mediante las instrucciones de Creación de la primera canalización y seleccione la plantilla Proceso vacío.

  3. Seleccione Proceso en la pestaña Tareas del editor de canalizaciones y cambie las propiedades como se muestra a continuación:

    • Cola del agente:
  4. Agregue las siguientes tareas a la canalización en el orden especificado:

    • npm

      • Comando:
    • npm

      • Nombre para mostrar:
      • Comando:
      • Comandos y argumentos:
    • Publicación de los resultados de las pruebas

      • Deje todos los valores predeterminados para las propiedades.
    • Archivos de archivo

      • Carpeta raíz o archivo que se archivará:
      • Anteponer el nombre de la carpeta raíz a las rutas de acceso de archivo: Desactivada
    • Publicar artefactos de compilación

      • Deje todos los valores predeterminados para las propiedades.
  5. Guarde la canalización y poner en cola una compilación para verla en acción.

Conozca algunas de las formas habituales de personalizar el proceso de compilación de JavaScript.

Entorno de compilación

Puede usar Azure Pipelines para compilar aplicaciones de JavaScript sin necesidad de configurar ninguna infraestructura propia. Puede usar agentes Windows o Linux para ejecutar las compilaciones.

Actualice el siguiente fragmento de código azure-pipelines.yml en el archivo para seleccionar la imagen adecuada.

pool:
  vmImage: 'ubuntu-latest' # examples of other options: 'macOS-10.15', 'windows-latest'

Las herramientas que se usan normalmente para compilar, probar y ejecutar aplicaciones de JavaScript (como npm, Node, Yarn y Gulp) están preinstaladas en agentes hospedados por Microsoft en Azure Pipelines. Para obtener la versión exacta de Node.js y npm preinstalados, consulte Agentes hospedados por Microsoft. Para instalar una versión específica de estas herramientas en agentes hospedados por Microsoft, agregue la tarea Instalador de herramientas de nodo al principio del proceso.

También puede usar un agente auto-hospedado.

Usar una versión específica de Node.js

Si necesita una versión de Node.js y npm que aún no esté instalada en el agente hospedado por Microsoft, use la tarea instalador de herramientas de Node. Agregue el siguiente fragmento de código al azure-pipelines.yml archivo.

Nota

Los agentes hospedados se actualizan periódicamente y, al configurar esta tarea, se dedicará mucho tiempo a actualizar a una versión secundaria más reciente cada vez que se ejecute la canalización. Use esta tarea solo cuando necesite una versión específica de Node en la canalización.

- task: NodeTool@0 
  inputs:
    versionSpec: '12.x' # replace this value with the version that you need for your project

Si necesita una versión de Node.js/npm que aún no está instalada en el agente:

  1. En la canalización, seleccione Tareas, elija la fase que ejecuta las tareas de compilación y, a continuación, seleccione para agregar una nueva tarea a esa fase.

  2. En el catálogo de tareas, busque y agregue la tarea Instalador de herramientas de nodo.

  3. Seleccione la tarea y especifique la versión del entorno Node.js tiempo de ejecución que desea instalar.

Para actualizar solo la herramienta npm, ejecute el npm i -g npm@version-number comando en el proceso de compilación.

Uso de varias versiones de nodo

Puede compilar y probar la aplicación en varias versiones de Node mediante una estrategia y la tarea del instalador de herramientas de Node.

pool:
  vmImage: 'ubuntu-latest'
strategy:
  matrix:
    node_12_x:
      node_version: 12.x
    node_13_x:
      node_version: 13.x

steps:
- task: NodeTool@0 
  inputs:
    versionSpec: $(node_version)

- script: npm install

Instalación de herramientas en el agente de compilación

Si ha definido las herramientas necesarias para la compilación como dependencias de desarrollo en el archivo o del proyecto, instale estas herramientas junto con el resto de las dependencias del proyecto a través package.jsonpackage-lock.json de npm. Esto instalará la versión exacta de las herramientas definidas en el proyecto, aisladas de otras versiones que existen en el agente de compilación.

Puede usar un script o la tarea npm.

Uso de un script para instalar con package.json

- script: npm install --only=dev

Uso de la tarea npm para instalar con package.json

- task: Npm@1
  inputs:
     command: 'install'

Ejecute las herramientas instaladas de esta manera mediante el ejecutor de paquetes de npm, que primero buscará las herramientas instaladas de esta manera npx en su resolución de ruta de acceso. En el ejemplo siguiente se llama al ejecutor de pruebas, pero se buscará la versión instalada como una dependencia de desarrollo antes de usar una versión instalada mocha globalmente (hasta npm install -g ).

- script: npx mocha

Para instalar herramientas que el proyecto necesita pero que no están establecidas como dependencias de desarrollo en , llame a desde una fase package.json de script en la npm install -g canalización.

En el ejemplo siguiente se instala la versión más reciente de la CLI Angular mediante . El resto de la canalización puede usar la ng herramienta desde otras script fases.

Nota

En los agentes de Linux hospedados por Microsoft, anteceda el comando sudo con , como sudo npm install -g .

- script: npm install -g @angular/cli

Estas tareas se ejecutarán cada vez que se ejecute la canalización, por lo que debe tener en cuenta el impacto que la instalación de herramientas tiene en los tiempos de compilación. Considere la posibilidad de configurar agentes auto hospedados con la versión de las herramientas que necesita si la sobrecarga se convierte en un impacto grave en el rendimiento de la compilación.

Use las tareas npmo de línea de comandos de la canalización para instalar herramientas en el agente de compilación.

Administración de dependencias

En la compilación, use Yarn o Azure Artifacts/TFS para descargar paquetes del registro npm público, que es un tipo de registro npm privado que se especifica en el archivo .npmrc.

npm

Puede usar NPM de varias maneras para descargar paquetes para la compilación:

  • Ejecute directamente npm install en la canalización. Esta es la manera más sencilla de descargar paquetes de un registro que no necesita autenticación. Si la compilación no necesita dependencias de desarrollo en el agente para ejecutarse, puede acelerar los tiempos de compilación con --only=prod la opción de npm install .
  • Use una tarea npm. Esto resulta útil cuando se usa un registro autenticado.
  • Use una tarea de autenticación de npm. Esto resulta útil cuando se ejecuta npm install desde dentro de los ejecutores de tareas: Gulp, Grunt o Maven.

Si desea especificar una registro npm, coloque las direcciones URL en un .npmrc archivo en el repositorio. Si la fuente está autenticada, administre sus credenciales mediante la creación de una conexión de servicio npm en la pestaña Servicios en Project Configuración.

Para instalar paquetes npm mediante un script en la canalización, agregue el siguiente fragmento de código a azure-pipelines.yml .

- script: npm install

Para usar un registro privado especificado en el .npmrc archivo, agregue el siguiente fragmento de código a azure-pipelines.yml .

- task: Npm@1
  inputs:
    customEndpoint: <Name of npm service connection>

Para pasar credenciales del Registro a comandos npm a través de ejecutores de tareas como Gulp, agregue la siguiente tarea a antes de llamar azure-pipelines.yml al ejecutor de tareas.

- task: npmAuthenticate@0
  inputs:
    customEndpoint: <Name of npm service connection>

Use la tarea npm o npm authenticate de la canalización para descargar e instalar paquetes.

Si en ocasiones se producirá un error en las compilaciones debido a problemas de conexión al restaurar paquetes desde el registro npm, puede usar Azure Artifacts junto con orígenes ascendentes y almacenar en caché los paquetes. Las credenciales de la canalización se usan automáticamente al conectarse a Azure Artifacts. Estas credenciales normalmente se derivan de la cuenta Project servicio de compilación de recopilación.

Si usa agentes hospedados por Microsoft,obtiene una nueva máquina cada vez que ejecuta una compilación, lo que significa restaurar las dependencias cada vez.

Esto puede tardar una cantidad significativa de tiempo. Para mitigar esto, puede usar Azure Artifacts o un agente auto-hospedado. A continuación, se obtiene la ventaja de usar la caché de paquetes.

Yarn

Use una fase de script para invocar Yarn para restaurar las dependencias. Yarn está disponible preinstalado en algunos agentes hospedados por Microsoft. Puede instalarlo y configurarlo en agentes auto-hospedados como cualquier otra herramienta.

- script: yarn install

Use la CLI o la tarea Bash en la canalización para invocar Yarn.

Ejecución de compiladores de JavaScript

Use compiladores como Javascriptl y el compilador de TypeScript para convertir el código fuente en versiones que el entorno de ejecución de Node.js o en exploradores web puedan usar.

Si tiene un objeto de script configurado en el archivo del proyecto que ejecuta el compilador, invoquelo en la canalización mediante una tarea de script.

- script: npm run compile

Puede llamar a compiladores directamente desde la canalización mediante la tarea script. Estos comandos se ejecutarán desde la raíz del repositorio de código fuente clonado.

- script: tsc --target ES6 --strict true --project tsconfigs/production.json

Use la tarea npm en la canalización si tiene un script de compilación definido en el archivo package.json del proyecto para compilar el código. Use la tarea Bash para compilar el código si no tiene un script independiente definido en la configuración del proyecto.

Ejecutar pruebas unitarias

Configure las canalizaciones para ejecutar las pruebas de JavaScript de modo que produzcan resultados con el formato XML de JUnit. A continuación, puede publicar los resultados mediante la tarea integrada publicar resultados de pruebas.

Si el marco de prueba no admite la salida de JUnit, deberá agregar compatibilidad a través de un módulo de informes de asociados, como mocha-junit-reporter. Puede actualizar el script de prueba para usar el reportero de JUnit o, si el informante admite opciones de línea de comandos, pasarlas a la definición de tarea.

En la tabla siguiente se enumeran los ejecutores de pruebas más usados y los informadores que se pueden usar para generar resultados XML:

Ejecutor de pruebas Reportajes para generar informes XML
Mocha mocha-junit-reporter
lugar de trabajo de varios reportero
Jazmín reportere-reporters
Broma jest-junit
jest-junit-reporter
Karma momento-junit-reporter
Ava tap-xunit

En este ejemplo se usa mocha-junit-reporter e invoca directamente mediante un script. Esto genera la salida XML de JUnit en la ubicación predeterminada de ./test-results.xml .

- script: mocha test --reporter mocha-junit-reporter

Si ha definido un test script en el archivo package.json del proyecto, puede invocarlo mediante npm test .

- script: npm test


Publicación de resultados de pruebas

Para publicar los resultados, use la tarea Resultados de pruebas publicación.

- task: PublishTestResults@2
  condition: succeededOrFailed()
  inputs:
    testRunner: JUnit
    testResultsFiles: '**/test-results.xml'

Publicación de resultados de cobertura de código

Si los scripts de prueba ejecutan una herramienta de cobertura de código como,por ejemplo , agregue la tarea Publicar resultados de cobertura de código para publicar los resultados de cobertura de código junto con los resultados de las pruebas. Al hacerlo, puede encontrar métricas de cobertura en el resumen de compilación y descargar informes HTML para su posterior análisis. La tarea espera la salida de informes cobertura o JaCoCo, por lo que debe asegurarse de que la herramienta de cobertura de código se ejecuta con las opciones necesarias para generar la salida correcta. (Por ejemplo, --report cobertura).

En el ejemplo siguiente se usa nyc, la interfaz de la línea de comandos de Nyc, junto con mocha-junit-reporter e invoca el comando .

- script: |
    nyc --reporter=cobertura --reporter=html \
    npm test -- --reporter mocha-junit-reporter --reporter-options mochaFile=./test-results.xml
  displayName: 'Build code coverage report'

- task: PublishCodeCoverageResults@1
  inputs: 
    codeCoverageTool: Cobertura # or JaCoCo
    summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/*coverage.xml'
    reportDirectory: '$(System.DefaultWorkingDirectory)/**/coverage'

Use las tareas Publicar Resultados de pruebas y Publicar resultados de cobertura de código de la canalización para publicar los resultados de las pruebas junto con los resultados de cobertura de código mediante LaNús.

Establezca las Opciones de control para que la tarea Publicar Resultados de pruebas ejecute la tarea incluso si se ha dado un error en una tarea anterior, a menos que se cancele la implementación.

Pruebas de explorador de un extremo a otro

Ejecute pruebas en exploradores sin información como parte de la canalización con herramientas como Protractor o Karma. A continuación, publique los resultados de la compilación en VSTS con estos pasos:

  1. Instale un controlador de pruebas de explorador sin cabeza, como Chrome o Firefox, o una herramienta de simulación de explorador como PhantomJS, en el agente de compilación.
  2. Configure el marco de pruebas para usar la opción de explorador o controlador sin cabeza que prefiera según la documentación de la herramienta.
  3. Configure el marco de pruebas (normalmente con un complemento o configuración de reportero) para generar resultados de pruebas con formato JUnit.
  4. Configure una tarea de script para ejecutar los comandos de la CLI necesarios para iniciar las instancias de explorador sin sentido.
  5. Ejecute las pruebas de un extremo a otro en las fases de canalización junto con las pruebas unitarias.
  6. Publique los resultados mediante la misma tarea Publicar Resultados de pruebas junto con las pruebas unitarias.

Empaquetar aplicaciones web

Empaquete aplicaciones para agrupar todos los módulos de aplicación con salidas intermedias y dependencias en recursos estáticos listos para la implementación. Agregue una fase de canalización después de la compilación y pruebas para ejecutar una herramienta como Webpack o ng build mediante la CLI Angular.

El primer ejemplo llama a webpack . Para que esto funcione, asegúrese de que está configurado como una dependencia webpack de desarrollo en el archivo de proyecto package.json. Esto se ejecutará con la configuración predeterminada a menos webpack que tenga un archivo en la carpeta raíz del webpack.config.js proyecto.

- script: webpack

En el ejemplo siguiente se usa la tarea npm para llamar al objeto de script definido en el archivo build package.json del proyecto. El uso de objetos de script en el proyecto mueve la lógica de la compilación al código fuente y fuera de la canalización.

- script: npm run build

Use la CLI o la tarea Bash de la canalización para invocar la herramienta de empaquetado, como o Angular de .

Marcos de JavaScript

Angular

Para Angular aplicaciones, puede incluir comandos específicos de Angular, como ng test, ng buildy ng e2e. Para usar Angular comandos de la CLI en la canalización, debe instalar el paquete angular/cli npm en el agente de compilación.

Nota

En los agentes de Linux hospedados por Microsoft, anteceda el comando sudo con , como sudo npm install -g .

- script: |
    npm install -g @angular/cli
    npm install
    ng build --prod

Agregue las siguientes tareas a la canalización:

  • npm

    • Comando:
    • Comandos y argumentos:
  • npm

    • Comando:
  • bash

    • Tipo:
    • Guión:

Para las pruebas de la canalización que requieren que se ejecute un explorador (por ejemplo, el comando de prueba ng en la aplicación de inicio, que ejecuta Firefox), debe usar un explorador sin cabeza en lugar de un explorador estándar. En la Angular de inicio:

  1. Cambie la browsers entrada del archivo browsers proyecto de a browsers: ['Chrome']browsers: ['ChromeHeadless'] .

  2. Cambie la singleRun entrada del archivo singleRun proyecto de un valor de false a true . Esto ayuda a asegurarse de que el proceso de Quedate se detenga después de que se ejecute.

React y Vue

Todas las dependencias de las aplicaciones React y Vue se capturan en el archivo package.json. El archivo azure-pipelines.yml contiene el script Node.js estándar:

- script: |
    npm install
    npm run build
 displayName: 'npm install and build'

Los archivos de compilación se encuentran en una nueva carpeta dist (para Vue) o build (para React). Este fragmento de código compila un artefacto, www , que está listo para su lanzamiento. Usa las tareas Instalador de nodo,Copiararchivos y Publicar Artifacts compilación.

trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: NodeTool@0
  inputs:
    versionSpec: '10.x'
  displayName: 'Install Node.js'

- script: |
    npm install
    npm run build
  displayName: 'npm install and build'

- task: CopyFiles@2
  inputs:
    Contents: 'build/**' # Pull the build directory (React)
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

- task: PublishBuildArtifacts@1
  inputs: 
    PathtoPublish: $(Build.ArtifactStagingDirectory) # dist or build files
    ArtifactName: 'www' # output artifact named www

Para liberar, apunte la tarea de versión al dist artefacto o y use la tarea Azure Web App builddist.

Webpack

Puede usar un archivo de configuración de webpack para especificar un compilador (como Packl o TypeScript) para transpilar JSX o TypeScript a JavaScript sin formato y agrupar la aplicación.

- script: |
    npm install webpack webpack-cli --save-dev
    npx webpack --config webpack.config.js

Agregue las siguientes tareas a la canalización:

  • npm

    • Comando:
    • Comandos y argumentos:
  • bash

    • Tipo:
    • Guión:

Ejecutores de tareas de compilación

Es habitual usar Gulp o Grunt como ejecutor de tareas para compilar y probar una aplicación de JavaScript.

Gulp

Gulp está preinstalado en agentes hospedados por Microsoft. Para ejecutar el gulp comando en el archivo YAML:

- script: gulp                       # include any additional options that are needed

Si los pasos del archivo gulpfile.js requieren autenticación con un registro npm:

- task: npmAuthenticate@0
  inputs:
    customEndpoint: <Name of npm service connection>

- script: gulp                       # include any additional options that are needed

Agregue la tarea Publicar Resultados de pruebas para publicar los resultados de pruebas de JUnit o xUnit en el servidor.

- task: PublishTestResults@2
  inputs:
    testResultsFiles: '**/TEST-RESULTS.xml'
    testRunTitle: 'Test results for JavaScript using gulp'

Agregue la tarea Publicar resultados de cobertura de código para publicar los resultados de cobertura de código en el servidor. Puede encontrar las métricas de cobertura en el resumen de compilación y puede descargar informes HTML para su posterior análisis.

- task: PublishCodeCoverageResults@1
  inputs: 
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/*coverage.xml'
    reportDirectory: '$(System.DefaultWorkingDirectory)/**/coverage'

La manera más sencilla de crear una canalización si la aplicación usa Gulp es usar elNode.js con la plantilla de compilación de Gulp al crear la canalización. Esto agregará automáticamente varias tareas para invocar comandos de Gulp y publicar artefactos. En la tarea, seleccione Habilitar cobertura de código para habilitar la cobertura de código mediante Javascript.

Grunt

Grunt está preinstalado en agentes hospedados por Microsoft. Para ejecutar el comando grunt en el archivo YAML:

- script: grunt                      # include any additional options that are needed

Si los pasos del archivo Gruntfile.js requieren autenticación con un registro npm:

- task: npmAuthenticate@0
  inputs:
    customEndpoint: <Name of npm service connection>

- script: grunt                      # include any additional options that are needed

La manera más sencilla de crear una canalización si la aplicación usa Grunt es usar elNode.js con la plantilla de compilación grunt al crear la canalización. Esto agregará automáticamente varias tareas para invocar comandos de Gulp y publicar artefactos. En la tarea, seleccione la opción Publicar en TFS/Team Services para publicar los resultados de las pruebas y seleccione Habilitar cobertura de código para habilitar la cobertura de código mediante Javascript.

Empaquetar y entregar el código

Después de compilar y probar la aplicación, puede cargar la salida de compilación en Azure Pipelines, crear y publicar un paquete npm o Maven, o empaquetar la salida de compilación en un archivo .zip que se implementará en una aplicación web.

Publicar archivos en Azure Pipelines

Para cargar simplemente todo el directorio de trabajo de archivos, use la tarea Publicar Artifacts compilación y agregue lo siguiente al archivo.

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(System.DefaultWorkingDirectory)'

Para cargar un subconjunto de archivos, copie primero los archivos necesarios del directorio de trabajo en un directorio de ensayo con la tarea Copiar archivos y, a continuación, use la tarea Publicar Artifacts compilación.

- task: CopyFiles@2
  inputs:
    SourceFolder: '$(System.DefaultWorkingDirectory)'
    Contents: |
      **\*.js
      package.json
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

- task: PublishBuildArtifacts@1

Publicación de un módulo en un registro npm

Si la salida del proyecto es un módulo para su uso por otros proyectos y no una aplicación web, use la tarea npm para publicar el módulo en un registro local o en la red npm registro npm. npm Debe proporcionar una combinación de nombre y versión única cada vez que publique, por lo que debe tener esto en cuenta al configurar los pasos de publicación como parte de una canalización de versión o desarrollo.

En el primer ejemplo se supone que administra la información de versión (por ejemplo, a través de una versión de npm)mediante cambios en el archivo en el control de versiones. En este ejemplo se usa la tarea script para publicar en el registro público.

- script: npm publish

En el ejemplo siguiente se publica en un registro personalizado definido en el archivo del .npmrc repositorio. Deberá configurar una conexión de servicio npm para insertar credenciales de autenticación en la conexión a medida que se ejecuta la compilación.

- task: Npm@1
  inputs:
     command: publish
     publishRegistry: useExternalRegistry
     publishEndpoint: https://my.npmregistry.com

En el ejemplo final se publica el módulo en una Azure DevOps Services de administración de paquetes.

- task: Npm@1
  inputs:
     command: publish
     publishRegistry: useFeed
     publishFeed: https://my.npmregistry.com

Para obtener más información sobre el control de versiones y la publicación de paquetes npm, vea Publish npm packages (Publicar paquetes npm) y How can I version my npm packages as part of the build process? (¿Cómo puedo crear versiones de mis paquetes npm como parte del proceso de compilación?).

Implementación de una aplicación sitio

Para crear un .zip de archivos que esté listo para publicarse en una aplicación web, use la tarea Archivos de archivo:

- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
    includeRootFolder: false

Para publicar este archivo en una aplicación web, consulte Implementación de aplicaciones web de Azure.

Publicar artefactos en Azure Pipelines

Use la tarea Publicar Artifacts para publicar archivos de la compilación en Azure Pipelines o TFS.

Publicar en un registro npm

Para crear y publicar un paquete npm, use la tarea npm. Para obtener más información sobre el control de versiones y la publicación de paquetes npm, vea Publicar paquetes npm.

Implementación de una aplicación sitio

Para crear un .zip de archivos que esté listo para publicarse en una aplicación web, use la tarea Archivos de archivo. Para publicar este archivo en una aplicación web, consulte Implementación de aplicaciones web de Azure.

Compilación e inserción de imágenes en el registro de contenedor

Una vez que el código fuente se compila correctamente y las pruebas unitarias se han realizado correctamente, también puede compilar una imagen e insertarla en un registro de contenedor.

Solución de problemas

Si puede compilar el proyecto en la máquina de desarrollo pero tiene problemas para compilarlo en Azure Pipelines o TFS, explore las siguientes posibles causas y acciones correctivas:

  • Compruebe que las versiones de Node.js y el ejecutor de tareas de la máquina de desarrollo coinciden con las del agente. Puede incluir scripts de línea de comandos como node --version en la canalización para comprobar lo que está instalado en el agente. Use el Instalador de herramientas de Nodo (como se explica en esta guía) para implementar la misma versión en el agente o ejecute comandos para actualizar las herramientas a las versiones deseadas.

  • Si las compilaciones no se pueden realizar de forma intermitente mientras se restauran paquetes, el registro npm tiene problemas o hay problemas de red entre el centro de datos de Azure y el registro. Estos factores no están bajo nuestro control y es posible que deba explorar si el uso de Azure Artifacts con un registro npm como origen ascendente mejora la confiabilidad de las compilaciones.

  • Si usa para administrar diferentes versiones de Node.js, considere la posibilidad de cambiar a la tarea Instalador de nvmnvm nodo en su lugar. ( nvm se instala por motivos históricos en la imagen de macOS). nvmadministra varias versiones Node.js mediante la adición de alias de shell y la modificación de , que interactúa mal con la forma en que Azure Pipelines ejecuta cada tarea PATH en un nuevo nvm.

    La tarea Instalador de herramientas de nodo controla este modelo correctamente. Sin embargo, si el trabajo requiere el uso de nvm , puede agregar el siguiente script al principio de cada canalización:

    steps:
    - bash: |
        NODE_VERSION=12  # or whatever your preferred version is
        npm config delete prefix  # avoid a warning
        . ${NVM_DIR}/nvm.sh
        nvm use ${NODE_VERSION}
        nvm alias default ${NODE_VERSION}
        VERSION_PATH="$(nvm_version_path ${NODE_VERSION})"
        echo "##vso[task.prependPath]$VERSION_PATH"
    

    A node continuación, y otras herramientas de línea de comandos funcionarán para el resto del trabajo de canalización. En cada paso en el que necesite usar el comando, deberá nvm iniciar el script con:

    - bash: |
        . ${NVM_DIR}/nvm.sh
        nvm <command>
    

Preguntas más frecuentes

¿Dónde puedo obtener más información sobre Azure Artifacts y el Administración de paquetes de datos?

Administración de paquetes en Azure Artifacts y TFS

¿Dónde puedo obtener más información sobre las tareas?

Tareas de compilación, versión y prueba

Cómo un error de canalización con el mensaje "ERROR GRAVE: error CALL_AND_RETRY_LAST asignación: montón de JavaScript sin memoria"

Esto sucede cuando el paquete Node.js ha superado el límite de uso de memoria. Para resolver el problema, agregue una variable como y asígnele un valor de NODE_OPTIONSNODE_OPTIONS.

¿Cómo puedo crear versiones de mis paquetes npm como parte del proceso de compilación?

Una opción es usar una combinación de control de versiones y versión de npm. Al final de una ejecución de canalización, puede actualizar el repositorio con la nueva versión. En este YAML, hay un repositorio GitHub y el paquete se implementa en npmjs. Tenga en cuenta que se producirá un error en la compilación si hay una discrepancia entre la versión del paquete en npmjs y el package.json archivo.

variables:
    MAP_NPMTOKEN: $(NPMTOKEN) # Mapping secret var

trigger:
- none

pool:
  vmImage: 'ubuntu-latest'

steps: # Checking out connected repo
- checkout: self
  persistCredentials: true
  clean: true
    
- task: npmAuthenticate@0
  inputs:
    workingFile: .npmrc
    customEndpoint: 'my-npm-connection'
    
- task: NodeTool@0
  inputs:
    versionSpec: '12.x'
  displayName: 'Install Node.js'

- script: |
    npm install
  displayName: 'npm install'

- script: |
    npm pack
  displayName: 'Package for release'

- bash: | # Grab the package version
    v=`node -p "const p = require('./package.json'); p.version;"`
    echo "##vso[task.setvariable variable=packageVersion]$v"

- task: CopyFiles@2
  inputs:
      contents: '*.tgz'
      targetFolder: $(Build.ArtifactStagingDirectory)/npm
  displayName: 'Copy archives to artifacts staging directory'

- task: CopyFiles@2
  inputs:
    sourceFolder: '$(Build.SourcesDirectory)'
    contents: 'package.json' 
    targetFolder: $(Build.ArtifactStagingDirectory)/npm
  displayName: 'Copy package.json'

- task: PublishBuildArtifacts@1 
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)/npm'
    artifactName: npm
  displayName: 'Publish npm artifact'

- script: |  # Config can be set in .npmrc
    npm config set //registry.npmjs.org/:_authToken=$(MAP_NPMTOKEN) 
    npm config set scope "@myscope"
    # npm config list
    # npm --version
    npm version patch --force
    npm publish --access public

- task: CmdLine@2 # Push changes to GitHub (substitute your repo)
  inputs:
    script: |
      git config --global user.email "username@contoso.com"
      git config --global user.name "Azure Pipeline"
      git add package.json
      git commit -a -m "Test Commit from Azure DevOps"
      git push -u origin HEAD:main