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:
- Configure el entorno de compilación con agentes hospedados por Microsoft o auto-hospedados.
- Use la tarea npm o un script para descargar paquetes para la compilación.
- Implemente marcos de JavaScript:Angular, React o Vue.
- Ejecutar pruebas unitarias y publicarlas con la tarea publicar resultados de pruebas.
- Use la tarea publicar cobertura de código para publicar los resultados de cobertura de código.
- Publique paquetes npm con Azure Artifacts.
- Cree un .zip de archivos que esté listo para publicar en una aplicación web con la tarea Archivos de archivo e impleméntese en Azure.
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
Para empezar, bifurca este repositorio en GitHub.
https://github.com/Azure-Samples/js-e2e-express-serverInicie sesión en su organización de Azure DevOps y vaya a su proyecto.
En el proyecto, vaya a la página Pipelines (Canalizaciones). A continuación, elija la acción para crear una canalización.
Siga los pasos del asistente y seleccione primero GitHub como ubicación del código fuente.
Puede que se le redirija a GitHub para iniciar sesión. Si es así, escriba sus credenciales de GitHub.
Cuando aparezca la lista de repositorios, seleccione el Node.js de ejemplo.
Azure Pipelines analizará el código del repositorio y recomendará
Node.jsla plantilla para la canalización. Seleccione esa plantilla.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).
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
Para empezar, bifurca este repositorio en GitHub.
https://github.com/Azure-Samples/js-e2e-express-serverAgregue un
azure-pipelines.ymlarchivo 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'
Cree una canalización (si no sabe cómo, consulte Creación de la primera canalización)y, para la plantilla, seleccione YAML.
Establezca el grupo de agentes y la ruta de acceso del archivo YAML para la canalización.
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.
Cuando esté listo para realizar cambios en la canalización, edite la canalización.
Consulte las secciones siguientes para obtener información sobre algunas de las formas más comunes de personalizar la canalización.
Clásico
Para empezar, bifurca este repositorio en GitHub.
https://github.com/Azure-Samples/js-e2e-express-serverUna 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.
Seleccione Proceso en la pestaña Tareas del editor de canalizaciones y cambie las propiedades como se muestra a continuación:
- Cola del agente:
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.
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:
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.
En el catálogo de tareas, busque y agregue la tarea Instalador de herramientas de nodo.
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
Consulte Ejecución de varias configuraciones.
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 installen 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=prodla opción denpm 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 installdesde 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:
- 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.
- 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.
- Configure el marco de pruebas (normalmente con un complemento o configuración de reportero) para generar resultados de pruebas con formato JUnit.
- Configure una tarea de script para ejecutar los comandos de la CLI necesarios para iniciar las instancias de explorador sin sentido.
- Ejecute las pruebas de un extremo a otro en las fases de canalización junto con las pruebas unitarias.
- 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:
Cambie la
browsersentrada del archivobrowsersproyecto de abrowsers: ['Chrome']browsers: ['ChromeHeadless'].Cambie la
singleRunentrada del archivosingleRunproyecto de un valor defalseatrue. 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 --versionen 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
nvmnvmnodo en su lugar. (nvmse 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 tareaPATHen un nuevonvm.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
nodecontinuació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ánvminiciar 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