Compartir a través de


Integración continua y despliegue continuo a dispositivos de Azure IoT Edge (editor clásico)

Se aplica a:IoT Edge 1.4 checkmark IoT Edge 1.4

Importante

Las versiones de IoT Edge 1.5 LTS e IoT Edge 1.4 son compatibles. Si está en una versión anterior, consulte Actualización de IoT Edge.

Azure Pipelines incluye una tarea integrada de Azure IoT Edge que le ayuda a adoptar DevOps con las aplicaciones de Azure IoT Edge. En este artículo se muestra cómo usar las características de integración continua e implementación continua de Azure Pipelines para compilar, probar e implementar aplicaciones de forma rápida e eficaz en Azure IoT Edge mediante el editor clásico. Como alternativa, puede usar YAML.

Diagrama de las ramas de integración continua y desarrollo continuo para desarrollo y producción.

En este artículo, aprenderá a usar las tareas incorporadas de Azure IoT Edge en Azure Pipelines para crear canalizaciones de compilación y publicación para su solución de IoT Edge. Cada tarea de Azure IoT Edge que se agrega a la canalización implementa una de las cuatro acciones siguientes:

Acción Descripción
Generar imágenes de módulo Usa el código de su solución de IoT Edge y compila las imágenes de contenedor.
Insertar imágenes de módulo Inserta las imágenes del módulo en el registro de contenedor especificado.
Generar el manifiesto de implementación Usa el archivo deployment.template.json y sus variables para generar el archivo final de manifiesto de implementación de IoT Edge.
Implementación en dispositivos de IoT Edge Crea implementaciones de IoT Edge en uno o varios dispositivos IoT Edge.

A menos que se especifique lo contrario, los procedimientos descritos en este artículo no exploran toda la funcionalidad disponible mediante parámetros de tarea. Para obtener más información, consulte los siguientes recursos:

Prerrequisitos

  • Un repositorio de Azure Repos. Si no tiene uno, puede crear un nuevo repositorio de Git en el proyecto. En este artículo, hemos creado un repositorio denominado IoTEdgeRepo.

  • Una solución de IoT Edge confirmada e insertada en el repositorio. Si desea crear una nueva solución de ejemplo para probar este artículo, siga los pasos descritos en Desarrollo de módulos de Azure IoT Edge mediante Visual Studio Code. En este artículo, hemos creado una solución en nuestro repositorio denominado IoTEdgeSolution, que tiene el código de un módulo denominado filtermodule.

    En este artículo, todo lo que necesita es la carpeta de la solución creada mediante las plantillas de IoT Edge en Visual Studio Code o Visual Studio. No es necesario compilar, insertar, implementar ni depurar este código antes de continuar. Configurará esos procesos en Azure Pipelines.

    Conozca la ruta de acceso al archivo deployment.template.json de la solución, que se usa en varios pasos. Si no está familiarizado con el rol de la plantilla de implementación, consulte Aprenda a implementar módulos y establecer rutas.

    Sugerencia

    Si está creando una nueva solución, clone el repositorio localmente en primer lugar. A continuación, cuando cree la solución, puede elegir crearlo directamente en la carpeta del repositorio. Puede confirmar e insertar fácilmente los nuevos archivos desde allí.

  • Un registro de contenedor donde pueda insertar imágenes del módulo. Puede usar Azure Container Registry o un registro de terceros.

  • Un centro de Azure IoT activo con al menos dos dispositivos IoT Edge para probar las fases de implementación de prueba y producción independientes. Puede seguir los artículos de inicio rápido para crear un dispositivo IoT Edge en Linux o Windows.

Crear una canalización de compilación para la integración continua

En esta sección, creará una nueva canalización de compilación. Configure la canalización para que se ejecute automáticamente y publique registros de compilación cada vez que compruebe los cambios en la solución de IoT Edge.

  1. Inicie sesión en la organización de Azure DevOps (https://dev.azure.com/{your organization}) y abra el proyecto que contiene el repositorio de la solución de IoT Edge.

    Captura de pantalla que muestra cómo abrir el proyecto de DevOps.

  2. En el menú del panel izquierdo del proyecto, seleccione Canalizaciones. Seleccione Crear canalización en el centro de la página. O bien, si ya tiene canalizaciones de compilación, seleccione el botón Nueva canalización en la parte superior derecha.

    Captura de pantalla que muestra cómo crear una nueva canalización de compilación.

  3. En la parte inferior de la página ¿Dónde está el código? , seleccione Usar el editor clásico. Si desea usar YAML para crear canalizaciones de compilación del proyecto, consulte la guía de YAML.

    Captura de pantalla que muestra cómo usar el editor clásico.

  4. Siga las indicaciones para crear la canalización.

    1. Proporcione la información de origen para el nuevo proceso de compilación. Seleccione Git de Azure Repos como origen y, a continuación, seleccione el proyecto, el repositorio y la rama donde se encuentra el código de la solución de IoT Edge. A continuación, seleccione Continuar.

      Captura de pantalla que muestra cómo seleccionar el origen de la canalización.

    2. Seleccione Trabajo vacío en lugar de una plantilla.

      Captura de pantalla que muestra cómo empezar con un trabajo vacío para la canalización de compilación.

  5. Una vez creada la canalización, se le lleva al editor de canalizaciones. Aquí puede cambiar el nombre de la canalización, el grupo de agentes y la especificación del agente.

    Puede seleccionar un grupo hospedado por Microsoft o un grupo autohospedado que administre.

    En la descripción de la canalización, elija la especificación correcta del agente en función de la plataforma de destino:

    • Si desea compilar los módulos en la plataforma amd64 para contenedores de Linux, elija ubuntu-18.04.

    • Si quiere compilar los módulos en la plataforma amd64 para contenedores de Windows 1809, debe configurar el agente autohospedado en Windows.

    • Si desea compilar los módulos en la plataforma arm32v7 o arm64 para contenedores de Linux, debe configurar el agente autohospedado en Linux.

    Configure la especificación del agente de compilación.

  6. La canalización viene preconfigurada con un trabajo denominado Trabajo del agente 1. Seleccione el signo más (+) para agregar cuatro tareas al trabajo: Azure IoT Edge dos veces, Copiar archivos una vez y Publicar artefactos de compilación una vez. Busque cada tarea y mantenga el puntero sobre el nombre de la tarea para ver el botón Agregar .

    Agregue la tarea Azure IoT Edge.

    Cuando se agregan las cuatro tareas, el trabajo del Agente tiene el siguiente aspecto:

    Cuatro tareas en el pipeline de construcción.

  7. Seleccione la primera tarea de Azure IoT Edge para editarla. Esta tarea compila todos los módulos de la solución con la plataforma de destino que especifique. Edite la tarea con los valores siguientes:

    Parámetro Descripción
    Nombre para mostrar El nombre para mostrar se actualiza automáticamente cuando cambia el campo Acción.
    Acción Seleccione Compilar imágenes de módulo.
    archivo .template.json Seleccione los puntos suspensivos (...) y vaya al archivo deployment.template.json en el repositorio que contiene la solución de IoT Edge.
    Plataforma predeterminada Seleccione el sistema operativo adecuado para los módulos en función de su dispositivo IoT Edge de destino.
    Variables de salida Asigne un nombre de referencia para asociar a la ruta de acceso del archivo donde su archivo deployment.json se genera, como edge.

    Para más información sobre esta tarea y sus parámetros, consulte Tarea de Azure IoT Edge.

    Estas configuraciones usan el repositorio de imágenes y la etiqueta que se definen en el module.json archivo para asignar un nombre y etiquetar la imagen del módulo. Compilar imágenes del módulo también ayuda a reemplazar las variables con el valor exacto que defines en el archivo module.json. En Visual Studio o Visual Studio Code, especifique el valor real en un .env archivo. En Azure Pipelines, establezca el valor en la pestaña Variables de canalización . Seleccione la pestaña Variables en el menú del editor de canalizaciones y configure el nombre y el valor como se indica a continuación:

    • ACR_ADDRESS: valor del servidor de inicio de sesión de Azure Container Registry. Puede encontrar el valor del servidor de inicio de sesión en la página de información general del registro de contenedor en Azure Portal.

    Si tiene otras variables en su proyecto, puede especificar el nombre y el valor en esta pestaña. Las imágenes del módulo de compilación solo reconocen variables que están en formato ${VARIABLE}. Asegúrese de usar este formato en los **/module.json archivos.

  8. Seleccione la segunda tarea de Azure IoT Edge para editarla. Esta tarea transfiere todas las imágenes de módulos al registro de contenedores que seleccione.

    Parámetro Descripción
    Nombre para mostrar El nombre para mostrar se actualiza automáticamente cuando cambia el campo Acción.
    Acción Seleccione Enviar imágenes del módulo.
    Tipo de registro de contenedor Use el tipo predeterminado: Azure Container Registry.
    Suscripción de Azure Elija su suscripción.
    Azure Container Registry (Registro de Contenedores de Azure) Seleccione el tipo de registro de contenedor que usa para almacenar las imágenes del módulo. Dependiendo del tipo de registro que elija, el formulario cambia. Si elige Azure Container Registry, use las listas desplegables para seleccionar la suscripción de Azure y el nombre del registro de contenedor. Si elige Registro de contenedor genérico, seleccione Nuevo para crear una conexión de servicio del Registro.
    archivo .template.json Seleccione los puntos suspensivos (...) y vaya al archivo deployment.template.json en el repositorio que contiene la solución de IoT Edge.
    Plataforma predeterminada Seleccione el sistema operativo adecuado para los módulos en función de su dispositivo IoT Edge de destino.
    Agregar credenciales de registro al manifiesto de implementación Especifique true para agregar la credencial del registro para subir imágenes de Docker al manifiesto de implementación.

    Para más información sobre esta tarea y sus parámetros, consulte Tarea de Azure IoT Edge.

    Si tiene varios registros de contenedor para hospedar las imágenes del módulo, debe duplicar esta tarea, seleccionar un registro de contenedor diferente y usar Omitir módulos en la configuración avanzada para omitir las imágenes que no son para este registro específico.

  9. Seleccione la tarea Copiar archivos para editarla. Use esta tarea para copiar archivos en el directorio de almacenamiento provisional del artefacto.

    Parámetro Descripción
    Nombre para mostrar Usar el nombre predeterminado o personalizar
    Carpeta de origen Carpeta con los archivos que se van a copiar.
    Contenido Agregue dos líneas: deployment.template.json y **/module.json. Estos dos archivos sirven como entradas para generar el manifiesto de implementación de IoT Edge.
    Carpeta de destino Especifique la variable $(Build.ArtifactStagingDirectory). Consulte Variables de compilación para obtener más información sobre la descripción.

    Para obtener más información sobre esta tarea y sus parámetros, vea Tarea Copiar archivos.

  10. Seleccione la tarea Publicar artefactos de compilación para editarla. Proporcione la ruta de acceso del directorio de almacenamiento provisional de artefactos a la tarea para que la ruta de acceso se pueda publicar en la canalización de versión.

    Parámetro Descripción
    Nombre para mostrar Use el nombre predeterminado o personalice.
    Ruta de acceso para publicar Especifique la variable $(Build.ArtifactStagingDirectory). Consulte Compilación de variables para obtener más información.
    Nombre del artefacto Use el nombre predeterminado: drop
    Ubicación de publicación de artefactos Uso de la ubicación predeterminada: Azure Pipelines

    Para obtener más información sobre esta tarea y sus parámetros, vea Publicar tarea de artefactos de compilación.

  11. Abra la pestaña Desencadenadores y active la casilla Habilitar la integración continua. Asegúrese de que se incluya la rama que contiene su código.

Captura de pantalla que muestra cómo activar el desencadenador de integración continua.

  1. Seleccione Guardar en la lista desplegable Guardar y cola .

Esta canalización ahora está configurada para ejecutarse automáticamente al insertar código nuevo en el repositorio. La última tarea, la publicación de los artefactos de pipeline, desencadena una canalización de despliegue. Continúe con la sección siguiente para compilar la canalización de versión.

Creación de una canalización de versión para la implementación continua

En esta sección, creará una canalización de versión configurada para ejecutarse automáticamente cuando la canalización de compilación deje artefactos, y publicará los registros de implementación en Azure Pipelines.

Creación de una nueva canalización y adición de una nueva fase:

  1. En la pestaña Versiones, en Canalizaciones, seleccione + Nueva canalización. O bien, si ya tiene canalizaciones de versión, elija el botón + Nuevo y seleccione + Nueva canalización de versión.

    Adición de una canalización de versión mediante el botón + Nueva canalización

  2. Cuando se le pida que seleccione una plantilla, elija empezar con un trabajo vacío.

    Comience con un trabajo vacío para la pipeline de liberación.

  3. La nueva pipeline de lanzamiento se inicializa con una etapa, denominada Fase 1. Cambie el nombre de la fase 1 a desarrollo y tratarla como una canalización de implementación continua para el entorno de desarrollo. Normalmente, las canalizaciones de implementación continua tienen varias fases, como desarrollo, ensayo y prod. Puede usar nombres diferentes y crear más en función de la práctica de DevOps. Cierre la ventana de detalles de la fase una vez que haya cambiado el nombre.

    También puede cambiar el nombre de la canalización de versión. Para hacerlo, seleccione el texto "Nueva canalización de versión" en la parte superior.

  4. Vincule la versión con los artefactos de compilación que publica la canalización de compilación. Haga clic en Agregar en el área de artefactos.

    Haga clic en añadir en el área de artefactos de la interfaz.

  5. En la página Agregar un artefacto, seleccione Compilar como tipo de origen. Elija el proyecto y la canalización de compilación que ha creado. Si lo desea, puede cambiar el alias de origen a algo más descriptivo. A continuación, seleccione Agregar.

    En la página Agregar un artefacto, seleccione Agregar para crear el artefacto.

  6. Abra los desencadenadores de artefacto y seleccione el botón de alternancia para habilitar el desencadenador de implementación continua. Ahora, se creará una nueva versión cada vez que haya disponible una nueva compilación.

    Abra los desencadenadores del artefacto y alterne para habilitar el desencadenador de implementación continua.

  7. La fase de desarrollo está preconfigurada con un trabajo y cero tareas. En el menú de canalización, seleccione Tareas y, a continuación, elija la etapa dev. Seleccione el trabajo de agente y cambie su nombre visible a QA. Puede configurar detalles sobre el trabajo del agente, pero la tarea de implementación no distingue la plataforma para que pueda usar cualquier especificación del agente en el grupo de agentes elegido.

    Ver las tareas de la fase de desarrollo en la pestaña Tareas

  8. En el trabajo QA, seleccione el signo más (+) para agregar dos tareas. Busque y agregue Azure IoT Edge dos veces.

  9. Seleccione la primera tarea de Azure IoT Edge y configúrela con los siguientes valores:

    Parámetro Descripción
    Nombre para mostrar El nombre para mostrar se actualiza automáticamente cuando cambia el campo Acción.
    Acción Seleccione Generate deployment manifest.
    archivo .template.json Especifique la ruta de acceso: $(System.DefaultWorkingDirectory)/Drop/drop/deployment.template.json. La ruta de acceso se publica desde la canalización de compilación.
    Plataforma predeterminada Seleccione el sistema operativo adecuado para los módulos en función de su dispositivo IoT Edge de destino.
    Ruta de acceso de salida especifique la ruta de acceso $(System.DefaultWorkingDirectory)/Drop/drop/configs/deployment.json. Esta es la ruta de acceso del archivo de manifiesto de implementación de IoT Edge final.

    Estas configuraciones ayudan a reemplazar las direcciones URL de imágenes del módulo en el archivo deployment.template.json. El Generar manifiesto de implementación también ayuda a reemplazar las variables por el valor exacto que definió en el deployment.template.json archivo. En Visual Studio/Visual Studio Code, va a especificar el valor real en un archivo .env. En Azure Pipelines, establezca el valor en la pestaña Variables de la canalización de lanzamiento. Vaya a la pestaña Variables y configure el nombre y el valor como se indica a continuación:

    • ACR_ADDRESS: Valor del servidor de acceso de Azure Container Registry. Puede recuperar el servidor de inicio de sesión en la página de información general del registro de contenedor en Azure Portal.
    • ACR_PASSWORD: la contraseña de Azure Container Registry.
    • ACR_USER: nombre de usuario de Azure Container Registry.

    Si tiene otras variables en su proyecto, puede especificar el nombre y el valor en esta pestaña. El Generar manifiesto de implementación solo puede reconocer las variables que están en ${VARIABLE} flavor. Asegúrese de que está usando este tipo en los archivos *.template.json.

    "registryCredentials": {
      "<ACR name>": { // Your Azure Container Registry **Registry name** value
        "username": "${ACR_USER}",
        "password": "${ACR_PASSWORD}",
        "address": "${ACR_ADDRESS}"
      }
    }
    

    Configura las variables del pipeline de publicación en la pestaña Variables

  10. Seleccione la segunda tarea de Azure IoT Edge y configúrela con los siguientes valores:

    Parámetro Descripción
    Nombre para mostrar El nombre para mostrar se actualiza automáticamente cuando cambia el campo Acción.
    Acción Seleccione Deploy to IoT Edge devices.
    Archivo de implementación especifique la ruta de acceso $(System.DefaultWorkingDirectory)/Drop/drop/configs/deployment.json. Esta es la ruta de acceso del archivo de manifiesto de implementación de IoT Edge.
    Suscripción de Azure Seleccione la suscripción que contiene el centro de IoT.
    Nombre de IoT Hub Seleccione IoT Hub.
    Elegir uno o varios dispositivos Elija si quiere que la canalización de versión se implemente en uno o varios dispositivos. Si implementa en un único dispositivo, escriba el identificador del dispositivo IoT Edge. Si va a implementar en varios dispositivos, especifique la condición de destino del dispositivo. La condición de destino es un filtro para asociar un conjunto de dispositivos de IoT Edge en IoT Hub. Si quiere usar etiquetas de dispositivo como condición, debe actualizar las etiquetas de dispositivo correspondientes con el dispositivo gemelo de IoT Hub. Actualice el identificador de implementación de IoT Edge y la prioridad de implementación de IoT Edge en la configuración avanzada. Para más información sobre cómo crear una implementación para varios dispositivos, consulte Descripción de las implementaciones automáticas de IoT Edge.
    Id. de dispositivo o condición de destino En función de la selección anterior, especifique un identificador de dispositivo o una condición de destino para implementar en varios dispositivos.
    Avanzado Para el id. de implementación de IoT Edge, especifique $(System.TeamProject)-$(Release.EnvironmentName). Esta variable asigna el proyecto y el nombre de la versión con el id. de implementación de IoT Edge.

    Si la tarea implica el uso de una imagen que reside en un registro de confianza de Docker privado que no está visible para la nube pública, puede establecer la variable de entorno de SKIP_MODULE_IMAGE_VALIDATION en true para omitir la validación de imágenes.

    Incorporación de tareas de Azure IoT Edge para la fase de desarrollo

  11. Seleccione Guardar para guardar los cambios en la nueva canalización de versión. Vuelva a la vista de canalización seleccionando la pestaña Canalización en el menú.

Nota:

Las implementaciones superpuestas aún no se admiten en las tareas de Azure IoT Edge en Azure DevOps.

Sin embargo, puede usar una tarea de la CLI de Azure en Azure DevOps para crear su implementación como una implementación escalonada. Para el valor Inline Script, puede usar el comando az iot edge deployment create:

az iot edge deployment create -d {deployment_name} -n {hub_name} --content modules_content.json --layered true

Comprobación de CI/CD de IoT Edge con las canalizaciones de compilación y de versión

Para desencadenar un trabajo de compilación, puede insertar una confirmación en el repositorio de código fuente o desencadenarlo manualmente. En esta sección, desencadenará manualmente la canalización de CI/CD para probar que funcione. Luego verifique que la implementación se complete correctamente.

  1. En el menú del panel izquierdo, seleccione Canalizaciones y abra la canalización de compilación que creó al principio de este artículo.

  2. Para desencadenar un trabajo de compilación en la canalización de compilación, seleccione el botón Ejecutar canalización en la parte superior derecha.

    Activar manualmente la canalización de compilación usando el botón Ejecutar canalización

  3. Revise la configuración del pipeline de ejecución. A continuación, seleccione Ejecutar.

    Especifique las opciones de canalización de ejecución y seleccione Ejecutar.

  4. Seleccione Trabajo del agente 1 para ver el progreso de la ejecución del proceso. Puede seleccionar el trabajo para revisar los registros de la salida del trabajo.

    Revisar la salida de registro del trabajo

  5. Si la canalización de compilación se completa correctamente, inicia una versión para la etapa dev. La versión de desarrollo exitosa crea una implementación de IoT Edge para los dispositivos de destino.

    Versión para desarrollo

  6. Haga clic en fase de desarrollo para ver los registros de versión.

    Registros de lanzamientos

  7. Si se ha generado un error en la canalización, empiece por ver los registros. Para ver los registros, vaya al resumen de ejecución de canalización y seleccione el trabajo y la tarea. Si se ha generado un error en una tarea determinada, compruebe los registros de esa tarea. Para obtener instrucciones detalladas para configurar y usar registros, consulte Revisión de los registros para diagnosticar problemas de canalización.

Pasos siguientes