Compartir a través de


Implementación en máquinas virtuales Linux en un entorno

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

En este inicio rápido, aprenderá a configurar una canalización de Azure DevOps para la implementación en varios recursos de máquina virtual Linux en un entorno. Puede usar estas instrucciones para cualquier aplicación que publique un paquete de implementación web.

Requisitos previos

En el caso de las aplicaciones de JavaScript o Node.js, al menos dos máquinas virtuales Linux configuradas con Nginx en Azure.

Bifurcar el código de ejemplo

Si ya tiene una aplicación en GitHub que quiere implementar, puede intentar crear una canalización para ese código.

Si es un nuevo usuario, bifurque este repositorio en GitHub:

https://github.com/MicrosoftDocs/pipelines-javascript

Creación de un entorno con máquinas virtuales Linux

Puede agregar máquinas virtuales como recursos dentro de entornos y destinarlas a implementaciones de varias máquinas virtuales. El historial de implementación del entorno proporciona rastreabilidad de la máquina virtual a la confirmación.

Adición de un recurso de máquina virtual

  1. En el proyecto de Azure DevOps, vaya a Canalizaciones>Entornos y seleccione Crear entorno o Nuevo entorno.

  2. En la primera pantalla Nuevo entorno, agregue un nombre y una descripción opcional.

  3. En Recurso, seleccione Máquinas virtuales y, a continuación, seleccione Siguiente.

  4. En la siguiente pantalla Nuevo entorno , elija Linux en Sistema operativo.

  5. Copie el script de registro de Linux. El script es el mismo para todas las máquinas virtuales Linux agregadas al entorno.

    Captura de pantalla de la creación de máquinas virtuales.

    Nota:

    El token de acceso personal (PAT) del usuario que ha iniciado sesión se inserta previamente en el script y expira después de tres horas.

  6. Seleccione Cerrar y observe que se crea el nuevo entorno.

  7. Ejecute el script copiado en cada máquina virtual de destino que quiera registrar con el entorno.

    Nota:

    Si la máquina virtual ya tiene otro agente que se ejecuta en ella, proporcione un nombre único para que el agente se registre en el entorno.

Una vez registrada la máquina virtual, aparece como un recurso en la pestaña Recursos del entorno.

Captura de pantalla de la vista de recursos de máquina virtual.

Para volver a copiar el script para crear más recursos, por ejemplo, si expira el PAT, seleccione Agregar recurso en la página del entorno.

Incorporación y administración de etiquetas

Las etiquetas son una manera de tener como destino un conjunto específico de máquinas virtuales en un entorno para la implementación. No hay límite para el número de etiquetas que puede usar. Las etiquetas están limitadas a 256 caracteres cada una.

Puede agregar etiquetas o quitar etiquetas para máquinas virtuales en el script de registro interactivo o a través de la interfaz de usuario seleccionando Más acciones para un recurso de máquina virtual. En este inicio rápido, asigne una etiqueta diferente a cada máquina virtual del entorno.

Captura de pantalla de la vista de etiquetas.

Definición de una canalización de compilación de CI

Necesita una canalización de compilación de integración continua (CI) que publique la aplicación web y un script de implementación para ejecutarse localmente en el servidor Linux. Configure la canalización de compilación de CI en función del entorno de ejecución que quiera usar.

Importante

Durante los procedimientos de GitHub, es posible que se le pida que cree una conexión de servicio de GitHub o que se redirija a GitHub para iniciar sesión, instalar Azure Pipelines o autorizar Azure Pipelines. Siga las instrucciones que aparecen en pantalla para completar el proceso. Para más información, consulte Acceso a repositorios de GitHub.

  1. En el proyecto de Azure DevOps, seleccione Canalizaciones>crear canalización y, a continuación, seleccione GitHub como ubicación del código fuente.
  2. En la pantalla Seleccionar un repositorio , seleccione el repositorio de ejemplo bifurcada.
  3. En la pantalla Configurar su canalización, seleccione Canalización inicial. Azure Pipelines genera un archivo YAML denominado azure-pipelines.yml para la canalización.
  4. Seleccione el símbolo de intercalación desplegable junto a Guardar y ejecutar, seleccione Guardar y, a continuación, seleccione Guardar de nuevo. El archivo se guarda en el repositorio de GitHub bifurcado.

Edición del código

Seleccione Editar y reemplace el contenido del archivo azure-pipelines.yml por el código siguiente. Agregue a este YAML en los pasos futuros.

El código siguiente compila el proyecto de Node.js con npm.

    trigger:
    - main
    
    pool:
      vmImage: ubuntu-latest
    
    stages:
    - stage: Build
      displayName: Build stage
      jobs:  
      - job: Build
        displayName: Build
        steps:
        - task: UseNode@1
          inputs:
            version: '16.x'
          displayName: 'Install Node.js'
        - script: |
            npm install
            npm run build --if-present
            npm run test --if-present
          displayName: 'npm install, build and test'
        - task: ArchiveFiles@2
          displayName: 'Archive files'
          inputs:
            rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
            includeRootFolder: false
            archiveType: zip
            archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
            replaceExistingArchive: true
        - upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
          artifact: drop

Para obtener más información, revise los pasos descritos en Compilación de la aplicación de Node.js con Gulp para crear una compilación.

Ejecución de la canalización

Seleccione Validar y guardar y, después, Guardar, Ejecutar y volver a ejecutar.

Una vez ejecutada la canalización, compruebe que el trabajo se ejecutó correctamente y que ve un artefacto publicado.

Implementación en las máquinas virtuales Linux

  1. Edite la canalización para agregar el siguiente trabajo de implementación. Reemplace por <environment name> el nombre del entorno que creó anteriormente. Seleccione máquinas virtuales específicas del entorno para recibir la implementación especificando la <VM tag> que definió para cada máquina virtual.

    jobs:  
    - deployment: VMDeploy
      displayName: Web deploy
      environment:
        name:  <environment name>
        resourceType: VirtualMachine
        tags: <VM tag> # Update value for VMs to deploy to
      strategy:
    

    Para obtener más información, consulte la definición completa de jobs.deployment.

    Para obtener más información sobre la palabra clave y los environment recursos destinados a un trabajo de implementación, consulte la definición de jobs.deployment.environment.

  2. Especifique o runOnce rolling como una implementación strategy.

    • runOnce es la estrategia de implementación más sencilla. Los enlaces de preDeploy deployciclo de vida , routeTrafficy postRouteTraffic se ejecutan una vez. A continuación, se on: ejecuta o on: failure .success

      El código siguiente muestra un trabajo de implementación para runOnce:

      jobs:
      - deployment: VMDeploy
        displayName: Web deploy
        environment:
          name: <environment name>
          resourceType: VirtualMachine
          tags: <VM tag>
        strategy:
          runOnce:
            deploy:
              steps:
              - script: echo my first deployment
      
    • En el código siguiente se muestra un fragmento de código YAML para la rolling estrategia de implementación, mediante una canalización de Java. Puede actualizar hasta cinco destinos en cada iteración. El maxParallel parámetro especifica el número de destinos en los que se puede implementar en paralelo.

      La maxParallel selección tiene en cuenta el número absoluto o el porcentaje de destinos que deben permanecer disponibles en cualquier momento, excepto los destinos en los que se implementan y determina las condiciones de éxito y error durante la implementación.

      jobs: 
      - deployment: VMDeploy
        displayName: web
        environment:
          name: <environment name>
          resourceType: VirtualMachine
          tags: <VM tag>
        strategy:
            rolling:
              maxParallel: 2  #for percentages, mention as x%
              preDeploy:
                steps:
                - download: current
                  artifact: drop
                - script: echo initialize, cleanup, backup, install certs
              deploy:
                steps:
                - task: Bash@3
                  inputs:
                    targetType: 'inline'
                    script: |
                      # Modify deployment script based on the app type
                      echo "Starting deployment script run"
                      sudo java -jar '$(Pipeline.Workspace)/drop/**/target/*.jar'
              routeTraffic:
                steps:
                - script: echo routing traffic
              postRouteTraffic:
                steps:
                - script: echo health check post-route traffic
              on:
                failure:
                  steps:
                  - script: echo Restore from backup! This is on failure
                success:
                  steps:
                  - script: echo Notify! This is on success
      

      Con cada ejecución de este trabajo, el historial de implementación se registra en el entorno en el que creó y registró las máquinas virtuales.

Acceso a la rastreabilidad de la canalización en el entorno

La vista Implementaciones de entorno proporciona una rastreabilidad completa de confirmaciones y elementos de trabajo y un historial de implementación entre canalizaciones para el entorno.

Captura de pantalla de la vista de implementaciones.