Implementación en App Service de Azure Stack Hub mediante Azure Pipelines

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019

En este artículo se explica cómo configurar una canalización de CI/CD para implementar una aplicación en App Service en una instancia de Azure Stack Hub mediante Azure Pipelines.

En este artículo puede aprender a crear o validar:

  • Credenciales de entidad de servicio (SPN) de Azure Stack Hub para la canalización.
  • Una aplicación web en la instancia de Azure Stack Hub.
  • Una conexión de servicio a la instancia de Azure Stack Hub.
  • Un repositorio con el código de la aplicación que se va a implementar en la aplicación

Requisitos previos

Creación o validación del SPN

Un SPN proporciona credenciales basadas en roles para que los procesos fuera de Azure puedan conectarse a los recursos e interactuar con ellos. Necesitará un SPN con acceso de colaborador y los atributos especificados en estas instrucciones para usarlo con la canalización de Azure DevOps.

Como usuario de Azure Stack Hub, no tiene permisos para crear el SPN. Deberá solicitar la creación de esta entidad a su operador de la nube. Aquí se proporcionan instrucciones para que pueda crear el SPN si es un operador de la nube, o para que pueda validar el SPN si es un desarrollador que usa un SPN en el flujo de trabajo proporcionado por un operador de la nube.

El operador de la nube tendrá que crear el SPN mediante la CLI de Azure.

Los siguientes fragmentos de código se han escrito para una máquina Windows mediante el símbolo del sistema de PowerShell con la CLI de Azure para Azure Stack Hub. Si usa la CLI en una máquina con Linux y Bash, elimine la extensión de línea o reemplácela por el carácter \.

  1. Prepare los valores de los siguientes parámetros utilizados para crear el SPN:

    Parámetro Ejemplo Descripción
    endpoint-resource-manager "https://management.orlando.azurestack.corp.microsoft.com" Punto de conexión de administración de recursos.
    suffix-storage-endpoint "orlando.azurestack.corp.microsoft.com" Sufijo del punto de conexión para las cuentas de almacenamiento.
    suffix-keyvault-dns ".vault.orlando.azurestack.corp.microsoft.com" Sufijo DNS del servicio Key Vault.
    endpoint-active-directory-graph-resource-id "https://graph.windows.net/" El identificador de recurso de Active Directory.
    endpoint-sql-management https://notsupported Punto de conexión de administración de SQL Server. Establézcalo en https://notsupported
    perfil 2019-03-01-hybrid Perfil que se va a usar para esta nube.
  2. Abra la herramienta de la línea de comandos, como Windows PowerShell o Bash, e inicie sesión. Use el comando siguiente:

    az login
    
  3. Use el comando register para un nuevo entorno o el comando update si usa un entorno existente. Use el comando siguiente.

    az cloud register `
        -n "AzureStackUser" `
        --endpoint-resource-manager "https://management.<local>.<FQDN>" `
        --suffix-storage-endpoint ".<local>.<FQDN>" `
        --suffix-keyvault-dns ".vault.<local>.<FQDN>" `
        --endpoint-active-directory-graph-resource-id "https://graph.windows.net/" `
        --endpoint-sql-management https://notsupported  `
        --profile 2019-03-01-hybrid
    
  4. Obtenga el identificador de suscripción y el grupo de recursos que desea usar para el SPN.

  5. Cree el SPN mediante el siguiente comando con el identificador de suscripción y el grupo de recursos:

    az ad sp create-for-rbac --name "myApp" --role contributor `
        --scopes /subscriptions/{subscription-id}/resourceGroups/{resource-group} `
        --sdk-auth
    

    Si no tiene privilegios de operador de la nube, también puede iniciar sesión con el SPN que le proporcione el operador de la nube. Necesitará el identificador de cliente, el secreto y el identificador de inquilino. Con estos valores, puede usar los siguientes comandos de la CLI de Azure para crear el objeto JSON que contiene los valores que necesitará para crear la conexión de servicio.

    az login --service-principal -u "<client-id>" -p "<secret>" --tenant "<tenant-ID>" --allow-no-subscriptions
    az account show
    
  6. Compruebe el objeto JSON resultante. Usará el objeto JSON para crear la conexión de servicio. El objeto JSON debe tener los siguientes atributos:

    {
      "environmentName": "<Environment name>",
      "homeTenantId": "<Tenant ID for the SPN>",
      "id": "<Application ID for the SPN>",
      "isDefault": true,
      "managedByTenants": [],
      "name": "<Tenant name>",
      "state": "Enabled",
      "tenantId": "<Tenant ID for the SPN>",
      "user": {
        "name": "<User email address>",
        "type": "user"
      }
    }
    

Creación del destino de la aplicación web

  1. Inicie sesión en el portal de Azure Stack Hub.
  2. Seleccione Crear un recurso>Web y móvil>Aplicación web.
  3. Seleccione su suscripción.
  4. Cree o seleccione un grupo de recursos.
  5. Escriba el nombre de la aplicación. El nombre de la aplicación aparecerá en la dirección URL de la aplicación, por ejemplo, yourappname.appservice.<region>.<FQDN>
  6. Seleccione la pila del entorno en tiempo de ejecución de la aplicación. El tiempo de ejecución debe coincidir con el código que planea usar para la aplicación web.
  7. Seleccione el sistema operativo que hospedará el entorno de ejecución y la aplicación.
  8. Seleccione o escriba la región de la instancia de Azure Stack Hub.
  9. Seleccione el plan según la instancia de Azure Stack Hub, la región y el sistema operativo de la aplicación.
  10. Seleccione Revisar + crear.
  11. Revise la aplicación web. Seleccione Crear.
  12. Haga clic en Go to resource (Ir al recurso).
  13. Anote el nombre de la aplicación. Agregará el nombre al documento yml que define la canalización en el repositorio.

Creación de una conexión de servicio

Cree una conexión de servicio. Necesitará los valores del SPN y el nombre de la suscripción de Azure Stack Hub.

  1. Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.

  2. Seleccione Configuración del proyecto y, a continuación, Conexiones de servicio.

  3. Seleccione Conexiones de servicio>Nueva conexión de servicio.

  4. Seleccione Azure Resource Manager y, a continuación, haga clic en Siguiente.

  5. Seleccione Entidad de servicio (manual).

  6. Seleccione Azure Stack en Entorno.

  7. Rellene el formulario y, a continuación, seleccione Comprobar y guardar.

  8. Asigne un nombre a la conexión del servicio. (Necesitará el nombre de la conexión de servicio para crear la canalización de yaml).

    Creación de una conexión de servicio para Azure Stack Hub

Creación del repositorio y adición de canalización

  1. Si no ha agregado el código de la aplicación web al repositorio, agréguelo ahora.

  2. Abra el repositorio. Seleccione el repositorio y haga clic en Examinar.

  3. Seleccione Canalizaciones

  4. Selecciona Nueva canalización.

  5. Seleccione Git de Azure Repos.

  6. Seleccione el repositorio.

  7. Seleccione Canalización inicial.

  8. Vuelva al repositorio y abra azure-pipelines.yml.

  9. Agregue el siguiente código yaml:

    # Starter pipeline
    # Start with a minimal pipeline that you can customize to build and deploy your code.
    # Add steps that build, run tests, deploy, and more:
    # https://aka.ms/yaml
    trigger:
    - main
    variables:
      azureSubscription: '<your connection name>'
      VSTS_ARM_REST_IGNORE_SSL_ERRORS: true
    steps:
    - task: AzureWebApp@1
      displayName: Azure Web App Deploy
      inputs:
        azureSubscription: $(azureSubscription)
        appName: <your-app-name>
        package: '$(System.DefaultWorkingDirectory)'
    

    Nota:

    Para omitir los errores SSL, establezca una variable denominada VSTS_ARM_REST_IGNORE_SSL_ERRORS en el valor true de la canalización de compilación o versión, como en este ejemplo.

  10. Actualice el valor azureSubscription con el nombre de la conexión de servicio.

  11. Actualice appName con el nombre de la aplicación. Ahora ya puede realizar la implementación.

Notas sobre el uso de tareas de Azure con Azure Stack Hub

Las siguientes tareas de Azure se validan con Azure Stack Hub:

Pasos siguientes