Integración e implementación continuas en dispositivos Azure IoT Edge

Se aplica a:marca de verificación de IoT Edge 1.1 IoT Edge 1.1 marca de verificación de IoT Edge 1.2 IoT Edge 1.2 marca de verificación de IoT Edge 1.3 IoT Edge 1.3 marca de verificación de IoT Edge 1.4 IoT Edge 1.4

Puede adoptar fácilmente DevOps con las aplicaciones de Azure IoT Edge con las tareas integradas de Azure IoT Edge en Azure Pipelines. En este artículo se muestra cómo puede usar Azure Pipelines para crear, probar e implementar módulos de Azure IoT Edge mediante YAML. Como alternativa, puede usar el editor clásico.

Diagrama: ramas CI y CD para desarrollo y producción

En este artículo, aprenderá a usar las tareas integradas de Azure IoT Edge para Azure Pipelines para crear canalizaciones de compilación y versión para la 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, vea los siguientes recursos:

Requisitos previos

  • 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 quiere crear una nueva solución de ejemplo para hacer pruebas según este artículo, siga los pasos para desarrollar y depurar módulos en Visual Studio Code o desarrollar y depurar módulos de C# en Visual Studio. Para este artículo, hemos creado una solución en el repositorio denominada 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.js de la solución, ya 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 IoT de Azure activo con al menos dos dispositivos de IoT Edge para hacer pruebas de las fases independientes de implementación de prueba y producción. Puede seguir los artículos de la guía de inicio rápido para crear un dispositivo IoT Edge en Linux o Windows

Para más información sobre el uso Azure Repos, consulte Share your code with Visual Studio and Azure Repos (Compartir el código con Visual Studio y Azure Repos).

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 cuando se inserte algún cambio en la solución de IoT Edge de ejemplo y para publicar registros de compilación.

  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.

    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.

    Creación de una nueva canalización de compilación mediante el botón Nueva canalización

  3. En la página ¿Dónde está el código? , seleccione GIT de Azure ReposYAML . Si quiere usar el editor clásico para crear las canalizaciones de compilación del proyecto, consulte la guía del editor clásico.

  4. Seleccione el repositorio para el que va a crear una canalización.

    Seleccionar el repositorio para la canalización de compilación

  5. En la página Configurar la canalización, seleccione Canalización inicial. Si tiene un archivo YAML de Azure Pipelines preexistente que quiere usar para crear esta canalización, puede seleccionar Archivo YAML de Azure Pipelines existente y proporcionar la rama y la ruta de acceso del repositorio al archivo.

    Seleccione Canalización inicial o Archivo YAML de Azure Pipelines existente para iniciar la canalización de compilación

  6. En la página Revisar YAML de canalización, puede seleccionar el nombre predeterminado azure-pipelines.yml para cambiar el nombre del archivo de configuración de la canalización.

    Seleccione Mostrar el asistente para abrir la paleta de Tareas.

    Seleccione Mostrar el asistente para abrir la paleta de Tareas

  7. Para agregar una tarea, coloque el cursor al final del código YAML o donde quiera agregar las instrucciones para la tarea. Busque y seleccione Azure IoT Edge. Rellene los parámetros de la tarea como se indica a continuación. Después, seleccione Agregar.

    Parámetro Descripción
    Acción Seleccione Generar imágenes de módulo.
    archivo .template.json Proporcione la ruta de acceso 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.

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

    Uso de la paleta Tareas para agregar tareas a la canalización

    Sugerencia

    Después de agregar cada tarea, el editor resaltará automáticamente las líneas agregadas. Para evitar que se sobrescriba accidentalmente, anule la selección de las líneas y proporcione un nuevo espacio para la siguiente tarea antes de agregar tareas adicionales.

  8. Repita este proceso para agregar tres tareas más con los parámetros siguientes:

    • Tarea: Azure IoT Edge

      Parámetro Descripción
      Acción Seleccione Insertar imágenes de módulo.
      Tipo de registro de contenedor Use el tipo predeterminado: Azure Container Registry.
      Suscripción de Azure Seleccione su suscripción.
      Azure Container Registry Elija el registro que quiera usar para la canalización.
      archivo .template.json Proporcione la ruta de acceso 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.

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

    • Tarea: copia de archivos

      Parámetro Descripción
      Carpeta de origen Carpeta de origen desde la que se copiará. Empty es la raíz del repositorio. Use variables si los archivos no están en el repositorio. Ejemplo: $(agent.builddirectory).
      Contenido Agregue dos líneas: deployment.template.json y **/module.json.
      Carpeta de destino Especifique la variable $(Build.ArtifactStagingDirectory). Consulte las variables de compilación para obtener información acerca de sus descripciones.

      Para más información sobre esta tarea y sus parámetros, consulte Tarea de copia de archivos.

    • Tarea: Publicar artefactos de compilación

      Parámetro Descripción
      Ruta de acceso para publicar Especifique la variable $(Build.ArtifactStagingDirectory). Consulte las variables de compilación para obtener información acerca de sus descripciones.
      Nombre del artefacto Especifique el nombre predeterminado: drop
      Ubicación de publicación de artefactos Use la ubicación predeterminada: Azure Pipelines

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

  9. Seleccione Guardar en la lista desplegable Guardar y ejecutar de la parte superior derecha.

  10. El desencadenador para la integración continua está habilitado de forma predeterminada para la canalización YAML. Si quiere editar esta configuración, seleccione la canalización y haga clic en Editar en la parte superior derecha. Seleccione Más acciones junto al botón Ejecutar en la parte superior derecha y vaya a Desencadenadores. La Integración continua aparece como habilitada en el nombre de la canalización. Si quiere ver los detalles del desencadenador, active la casilla Invalidar el desencadenador de integración continua de YAML desde aquí.

    Para revisar la configuración del desencadenador de la canalización, consulte Desencadenadores en Más acciones.

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, se crea una canalización de versión que está configurada para ejecutarse automáticamente cuando la canalización de compilación coloca artefactos, y mostrará 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, elija + 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 compilación mediante el botón + Nueva canalización

  2. Cuando se le pida que seleccione una plantilla, elija empezar con una Fase vacía.

    Comenzar con un trabajo vacío para la canalización de versión

  3. La nueva canalización de versión se inicializa con una fase, llamada Fase 1. Cambie el nombre de la fase 1 a dev y trátela como una canalización de implementación continua para el entorno de desarrollo. Por lo general, las canalizaciones de implementación continua tienen varias fases, como desarrollo, almacenamiento provisional y producción. Puede usar distintos nombres y crear más según su 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 Agregar en el área de artefactos de la interfaz

  5. En la página Agregar un artefacto, seleccione Compilación como Tipo de origen. Elija el proyecto y la canalización de compilación que ha creado. Si quiere, puede cambiar el alias de origen por algo más descriptivo. Después, seleccione Agregar.

    En la página Agregar un artefacto, seleccione Agregar para crearlo

  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 de artefacto y seleccione el botón de alternancia para habilitar el desencadenador de implementación continua.

  7. La fase dev está preconfigurada con un trabajo y cero tareas. En el menú de la canalización, seleccione Tareas y, a continuación, elija la fase dev. Seleccione el Trabajo de agente y cambie su Nombre para mostrar por QA. Puede configurar los detalles del trabajo del agente, pero la tarea de implementación no distingue entre plataformas, por lo que puede usar cualquier Especificación del agente del Grupo de agentes seleccionado.

    Ver las tareas de la fase de desarrollo de 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 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 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 resultados 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 del módulo en el archivo deployment.template.json. Generate deployment manifest (Generar manifiesto de implementación) también ayuda a reemplazar las variables con el valor exacto que especificó en el archivo deployment.template.json. En VS o VS Code, el valor real se especifica en un archivo .env. En Azure Pipelines, el valor se establece en la pestaña Variables de canalización de versión. Vaya a la pestaña Variables y configure el nombre y valor de la siguiente manera:

    • ACR_ADDRESS: Valor del servidor de inicio de sesión 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: el nombre de usuario de Azure Container Registry.

    Si tiene otras variables en el proyecto, puede especificar el nombre y el valor en esta pestaña. La opción Generar manifiesto de implementación solo puede reconocer las variables del tipo ${VARIABLE}. 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}"
      }
    }
    

    Configuración de las variables para la canalización de versión en la pestaña Variables

  10. Seleccione la segunda tarea de Azure IoT Edge y configúrela 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 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 IoT Edge device ID (Id. de 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 IoT Edge deployment ID (Id. de implementación de IoT Edge) e IoT Edge deployment priority (Prioridad de implementación de IoT Edge) en la configuración avanzada. Para más información acerca de 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 id. de dispositivo o condición de destino que 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 es visible para la nube pública, puede establecer la variable de entorno SKIP_MODULE_IMAGE_VALIDATION en true para omitir la validación de la imagen.

    Adició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. Para volver a la vista de canalización, seleccione la pestaña Canalización en el menú.

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, puede seleccionar el botón Ejecutar canalización de la parte superior derecha.

    Desencadenar manualmente la canalización de compilación mediante el botón Ejecutar canalización

  3. Revise la configuración de Ejecutar canalización. Luego, seleccione Ejecutar.

    Especificar las opciones de ejecución de la canalización y seleccionar Ejecutar

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

    Revisar la salida del registro del trabajo

  5. Si la canalización de compilación se completa correctamente, se desencadena una versión en la fase dev. La versión dev correcta crea una implementación de IoT Edge en los dispositivos IoT Edge de destino.

    Versión de dev

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

    Registros de versión

  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 sobre cómo configurar y usar registros, consulte Revisión de registros para diagnosticar problemas de canalización.

Pasos siguientes