Integración e implementación continuas en dispositivos Azure IoT Edge (editor clásico)
Se aplica a: IoT Edge 1.4
Importante
IoT Edge 1.5 LTS e IoT Edge 1.4 son versiones compatibles. Si está usando 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 un enfoque DevOps con sus aplicaciones de Azure IoT Edge. En este artículo se muestra cómo usar las características de integración e implementación continuas de Azure Pipelines para crear, probar e implementar aplicaciones de forma rápida y eficaz en Azure IoT Edge mediante el editor clásico. Como alternativa, puede usar YAML.
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, consulte los siguientes recursos:
- Versión de tarea
- Avanzada: si se aplica, especifique los módulos que no quiera compilar.
- Opciones de control
- Variables de entorno
- Variables de salida
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 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. 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 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
Crear una canalización de compilación para la integración continua
En esta sección, creará una nueva canalización de compilación. Configurará la canalización para que se ejecute automáticamente y publique registros de compilación cuando registre cambios en la solución IoT Edge.
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.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.
En la parte inferior de la página ¿Dónde está el código?, seleccione Usar el editor clásico. Si quiere usar YAML para crear las canalizaciones de compilación del proyecto, consulte la guía de YAML.
Siga las indicaciones para crear la canalización.
Proporcione la información de origen para la nueva canalización de compilación. Seleccione GIT de Azure Repos como origen y, luego, seleccione el proyecto, el repositorio y la rama donde está ubicado el código de la solución de IoT Edge. Después, seleccione Continuar.
Seleccione Fase vacía en lugar de una plantilla.
Una vez creada la canalización, irá 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 de hosts de Microsoft o un grupo autohospedado que administre.
En la descripción de la canalización, elija la especificación del agente correcta a partir de la plataforma de destino:
Si quiere compilar los módulos en la plataforma amd64 para contenedores Linux, elija ubuntu-18.04.
Si quiere compilar los módulos en la plataforma amd64 para contenedores de Windows 1809, deberá configurar un agente autohospedado en Windows.
Si quiere compilar los módulos en la plataforma arm32v7 o arm64 para contenedores de Linux, deberá configurar un agente autohospedado en Linux.
La canalización viene preconfigurada con un trabajo denominado Trabajo del agente 1. Seleccione el signo de más (+) para agregar cuatro tareas al trabajo: Azure IoT Edge dos veces, Copiar archivos una vez y Publicar los artefactos de la compilación una vez. Busque cada tarea y mantenga el mouse sobre el nombre de la tarea para ver el botón Agregar.
Cuando se hayan agregado las cuatro tareas, el Trabajo del agente se verá similar al ejemplo siguiente:
Seleccione la primera tarea Azure IoT Edge para editarla. Esta tarea compila todos los módulos de la solución con la plataforma de destino que se especificó. 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. Action Seleccione Generar imágenes de módulo. archivo .template.json Seleccione los puntos suspensivos (...) y navegue hasta el 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 Proporcione un nombre de referencia para asociarlo a la ruta de acceso del archivo donde se genera el archivo deployment.json, 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 archivo
module.json
para asignar un nombre a la imagen del módulo y etiquetarla. Compilar imágenes del módulo también ayuda a reemplazar las variables por el valor exacto que defina en el archivomodule.json
. En Visual Studio o Visual Studio Code, el valor real se especifica en un archivo.env
. 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: El valor del servidor de inicio de sesión de Azure Container Registry. El valor del servidor de inicio de sesión está disponible en la página de información general del registro de contenedor en Azure Portal.
Si tiene otras variables en el proyecto, puede especificar el nombre y el valor en esta pestaña. Build module images (Compilar imágenes del módulo) solo reconoce las variables que están en formato
${VARIABLE}
. Asegúrese de usar este formato en los archivos de**/module.json
.Seleccione la segunda tarea Azure IoT Edge para editarla. Esta tarea insertará todas las imágenes del módulo en el registro de contenedor que seleccionó.
Parámetro Descripción Nombre para mostrar El nombre para mostrar se actualiza automáticamente cuando cambia el campo Acción. Action Seleccione Insertar imágenes de 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 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 Generic Container Registry (Registro de contenedor genérico), seleccione Nuevo para crear una conexión del servicio del registro. archivo .template.json Seleccione los puntos suspensivos (...) y navegue hasta el 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 del registro al manifiesto de implementación Especifique true para agregar las credenciales del registro para insertar imágenes de Docker en el manifiesto de implementación. Para más información sobre esta tarea y sus parámetros, consulte Tarea de Azure IoT Edge.
Si tiene varias instancias de Container Registry para hospedar las imágenes del módulo, tiene que duplicar esta tarea, seleccionar otra instancia de Container Registry y usar Omitir módulos en la configuración Avanzada para omitir las imágenes que no son de este registro específico.
Seleccione la tarea Copiar archivos para editarla. Use esta tarea para copiar archivos en el directorio de almacenamiento provisional de artefactos.
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 de entrada para generar el manifiesto de implementación de IoT Edge.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.
Seleccione la tarea Publicar los artefactos de la 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 pueda publicarse en la canalización de versión.
Parámetro Descripción Nombre para mostrar Use el nombre predeterminado o personalícelo. Ruta de acceso para publicar Especifique la variable $(Build.ArtifactStagingDirectory)
. Consulte Variables de compilación 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 más información sobre esta tarea y sus parámetros, consulte Publicar artefactos de compilación.
Abra la pestaña Desencadenadores y marque la casilla para Habilitar la integración continua. Asegúrese de que se incluye la rama que contiene el código.
- Seleccione Guardar en el menú desplegable Save & queue (Guardar y poner en 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 la canalización, desencadena una canalización de versión. 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:
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.
Cuando se le pida que seleccione una plantilla, elija empezar con una Fase vacía.
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.
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.
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. Luego, seleccione Agregar.
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.
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.
En el trabajo QA, seleccione el signo más (+) para agregar dos tareas. Busque y agregue Azure IoT Edge dos veces.
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. Action 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
. Generate deployment manifest (Generar manifiesto de implementación) también ayuda a reemplazar las variables con el valor exacto que especificó en el archivodeployment.template.json
. En Visual Studio/Visual Studio Code, va a especificar el valor real 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: El 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: 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}" } }
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. Action 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.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ú.
Nota:
Las tareas de Azure IoT Edge en Azure DevOps aún no admiten las implementaciones superpuestas.
Sin embargo, puede usar una tarea de la CLI de Azure en Azure DevOps para crear la implementación por capas. Para el valor Script en línea, 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.
En el menú del panel izquierdo, seleccione Canalizaciones y abra la canalización de compilación que creó al principio de este artículo.
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.
Revise la configuración de Ejecutar canalización. Luego, seleccione Ejecutar.
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.
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.
Haga clic en la fase dev para ver los registros de versión.
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
- Puede encontrar información sobre la implementación de IoT Edge en Descripción de las implementaciones de IoT Edge en un único dispositivo o a escala.
- Siga los pasos para crear, actualizar o eliminar una implementación en Implementación y supervisión de módulos de IoT Edge a escala.