Publicación automatizada para la integración y entrega continuas (CI/CD)

SE APLICA A: Azure Data Factory Azure Synapse Analytics

Sugerencia

Data Factory en Microsoft Fabric es la próxima generación de Azure Data Factory, con una arquitectura más sencilla, inteligencia artificial integrada y nuevas características. Si no está familiarizado con la integración de datos, comience con Fabric Data Factory. Las cargas de trabajo de ADF existentes pueden actualizarse a Fabric para acceder a nuevas funcionalidades en ciencia de datos, análisis en tiempo real e informes.

Nota:

Synapse Analytics también admite CI/CD. Consulte la documentación de CI/CD de Synapse Analytics para obtener más información.

Información general

La integración continua es el procedimiento de probar cada cambio realizado en el código base automáticamente y tan pronto como sea posible. La entrega continua sigue las pruebas realizadas durante la integración continua y envía los cambios a un sistema de ensayo o producción lo antes posible.

En Azure Data Factory, CI/CD significa mover canalizaciones de Data Factory de un entorno, como desarrollo, prueba y producción, a otro. Data Factory usa Azure Resource Manager plantillas (plantillas de ARM) para almacenar la configuración de las distintas entidades de Data Factory, como canalizaciones, conjuntos de datos y flujos de datos.

Se sugieren dos métodos para promover una factoría de datos a otro entorno:

  • Despliegue automatizado mediante la integración de Data Factory con Azure Pipelines.
  • Carga manual de una plantilla de ARM mediante la integración de la experiencia del usuario de Data Factory con Azure Resource Manager.

Para obtener más información, consulte Continuous integration and delivery in Azure Data Factory.

Este artículo está enfocado en las mejoras de implementación continua y en la característica de publicación automatizada para CI/CD.

Mejoras de implementación continua

La función de publicación automática toma las características Validar todo y Exportar plantilla de ARM de la experiencia de usuario de Data Factory para hacer que la lógica sea accesible a través de un paquete público de npm @microsoft/azure-data-factory-utilities. Por esta razón, puede desencadenar estas acciones mediante programación en lugar de tener que ir a la interfaz de usuario de Data Factory y seleccionar un botón de forma manual. Esta capacidad proporciona a tus pipelines CI/CD una experiencia de integración continua más auténtica.

Nota:

Asegúrate de usar Node.js versión 20.x y su versión compatible para evitar errores que puedan ocurrir por incompatibilidad de paquetes con versiones anteriores.

Flujo de CI/CD actual

  1. Cada usuario realiza cambios en sus ramas privadas.
  2. No está permitido empujar a main. Los usuarios deben crear una solicitud de incorporación de cambios para realizar cambios.
  3. Los usuarios deben cargar la interfaz de usuario de Data Factory y seleccionar Publicar para implementar los cambios en Data Factory y generar las plantillas de ARM en la rama de publicación.
  4. La canalización de versión de DevOps está configurada para crear una versión e implementar la plantilla de ARM cada vez que se inserta un cambio nuevo en la rama de publicación.

Diagrama en el que se muestra el flujo de CI/CD actual.

Paso manual

En el flujo de CI/CD actual, la experiencia de usuario es el intermediario para crear la plantilla de ARM. Como resultado, un usuario debe ir a la interfaz de usuario de Data Factory y seleccionar manualmente Publicar para iniciar la generación de la plantilla de ARM y colocarla en la rama de publicación.

Nuevo flujo de CI/CD

  1. Cada usuario realiza cambios en sus ramas privadas.
  2. No está permitido empujar a main. Los usuarios deben crear una solicitud de incorporación de cambios para realizar cambios.
  3. La compilación del pipeline de Azure DevOps se activa cada vez que se hace un nuevo commit en main. Valida los recursos y genera una plantilla de ARM como artefacto si la validación se realiza correctamente.
  4. La canalización de lanzamiento de DevOps está configurada para crear un nuevo lanzamiento e implementar la plantilla de ARM cada vez que hay una nueva compilación disponible.

Diagrama en el que se muestra el flujo nuevo de CI/CD.

¿Qué ha cambiado?

  • Ahora tienes un proceso de compilación que utiliza una pipeline de compilación DevOps.
  • La pipeline de compilación utiliza el paquete ADFUtilities (@microsoft/azure-data-factory-utilities) npm, que valida todos los recursos y genera las plantillas ARM. Estas plantillas pueden ser únicas y vinculadas.
  • La pipeline de compilación valida los recursos de Data Factory y genera la plantilla ARM en lugar de la interfaz de usuario de Data Factory (botón Publicar ).
  • La definición de versión de DevOps ahora usa esta nueva canalización de compilación en lugar del artefacto de Git.

Nota:

Puede seguir usando el mecanismo existente, que es la rama adf_publish, o puede usar el flujo nuevo. Se admiten ambos.

Introducción al paquete

Actualmente hay dos comandos disponibles en el paquete:

  • Exportar plantilla ARM
  • Validación

Exportar plantilla ARM

Ejecute npm run build export <rootFolder> <factoryId> [outputFolder] para exportar la plantilla de ARM mediante los recursos de una carpeta determinada. Este comando también ejecuta una comprobación de validación antes de generar la plantilla ARM. Aquí tienes un ejemplo que utiliza un grupo de recursos llamado testResourceGroup:

npm run build export C:\DataFactories\DevDataFactory /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testResourceGroup/providers/Microsoft.DataFactory/factories/DevDataFactory ArmTemplateOutput
  • RootFolder es un campo obligatorio que representa dónde se encuentran los recursos de Data Factory.
  • FactoryId es un campo obligatorio que representa el identificador de recurso de Data Factory con el formato /subscriptions/<subId>/resourceGroups/<rgName>/providers/Microsoft.DataFactory/factories/<dfName>.
  • OutputFolder es un parámetro opcional que especifica la ruta de acceso relativa para guardar la plantilla de ARM generada.

La capacidad de detener/iniciar solo los disparadores actualizados ya está disponible de forma general y se ha integrado en el comando anterior.

Nota:

La plantilla de ARM generada no se publica en la versión actual de la fábrica. La implementación debe realizarse mediante un pipeline de CI/CD.

Validación

Ejecute npm run build validate <rootFolder> <factoryId> para validar todos los recursos de una carpeta determinada. Este es un ejemplo:

npm run build validate C:\DataFactories\DevDataFactory /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testResourceGroup/providers/Microsoft.DataFactory/factories/DevDataFactory
  • RootFolder es un campo obligatorio que representa dónde se encuentran los recursos de Data Factory.
  • FactoryId es un campo obligatorio que representa el identificador de recurso de Data Factory con el formato /subscriptions/<subId>/resourceGroups/<rgName>/providers/Microsoft.DataFactory/factories/<dfName>.

Crea una canalización de Azure

Aunque los paquetes npm pueden consumirse de diversas maneras, uno de los principales beneficios es que se consumen a través de Azure Pipelines. En cada fusión en tu rama de colaboración, se puede activar una pipeline que primero valida todo el código y luego exporta la plantilla ARM a un artefacto de compilación que puede ser consumido por una pipeline de release. La diferencia con respecto al proceso actual de CI/CD es que harás que tu canalización de lanzamiento apunte a este artefacto en lugar de a la rama adf_publish existente.

Para comenzar, siga estos pasos:

  1. Abra un proyecto de Azure DevOps y vaya a Pipelines. Seleccione Nueva canalización.

    Captura de pantalla en la que se muestra el botón Nueva canalización.

  2. Seleccione el repositorio en el que quiere guardar el script de YAML de la canalización. Guárdalo en una carpeta de compilación en el mismo repositorio que los recursos de la fábrica de datos. Asegúrese de que hay un archivo package.json en el repositorio que contiene el nombre del paquete, tal como se muestra en el ejemplo siguiente:

    {
        "scripts":{
            "build":"node node_modules/@microsoft/azure-data-factory-utilities/lib/index"
        },
        "dependencies":{
            "@microsoft/azure-data-factory-utilities":"^1.0.0"
        }
    } 
    
  3. Seleccione Canalización inicial. Si ha cargado o combinado el archivo YAML, tal como se muestra en el ejemplo siguiente, también puede apuntar directamente a él y editarlo.

    Captura de pantalla en la que se muestra el Pipeline de inicio.

    # Sample YAML file to validate and export an ARM template into a build artifact
    # Requires a package.json file located in the target repository
    
    trigger:
    - main #collaboration branch
    
    pool:
      vmImage: 'ubuntu-latest'
    
    steps:
    
    # Installs Node and the npm packages saved in your package.json file in the build
    
    - task: UseNode@1
      inputs:
        version: '20.x'
      displayName: 'Install Node.js'
    
    - task: Npm@1
      inputs:
        command: 'install'
        workingDir: '$(Build.Repository.LocalPath)/<folder-of-the-package.json-file>' #replace with the package.json folder
        verbose: true
      displayName: 'Install npm package'
    
    # Validates all of the Data Factory resources in the repository. You'll get the same validation errors as when "Validate All" is selected.
    # Enter the appropriate subscription and name for the source factory. Either of the "Validate" or "Validate and Generate ARM template" options are required to perform validation. Running both is unnecessary.
    
    - task: Npm@1
      inputs:
        command: 'custom'
        workingDir: '$(Build.Repository.LocalPath)/<folder-of-the-package.json-file>' #replace with the package.json folder
        customCommand: 'run build validate $(Build.Repository.LocalPath)/<Root-folder-from-Git-configuration-settings-in-ADF> /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/<Your-ResourceGroup-Name>/providers/Microsoft.DataFactory/factories/<Your-Factory-Name>'
      displayName: 'Validate'
    
    # Validate and then generate the ARM template into the destination folder, which is the same as selecting "Publish" from the UX.
    # The ARM template generated isn't published to the live version of the factory. Deployment should be done by using a CI/CD pipeline. 
    
    - task: Npm@1
      inputs:
        command: 'custom'
        workingDir: '$(Build.Repository.LocalPath)/<folder-of-the-package.json-file>' #replace with the package.json folder
        customCommand: 'run build export $(Build.Repository.LocalPath)/<Root-folder-from-Git-configuration-settings-in-ADF> /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/<Your-ResourceGroup-Name>/providers/Microsoft.DataFactory/factories/<Your-Factory-Name> "ArmTemplate"'
    #For using preview that allows you to only stop/ start triggers that are modified, please comment out the above line and uncomment the below line. Make sure the package.json contains the build-preview command. 
     #customCommand: 'run build-preview export $(Build.Repository.LocalPath) /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/GartnerMQ2021/providers/Microsoft.DataFactory/factories/Dev-GartnerMQ2021-DataFactory "ArmTemplate"'
      displayName: 'Validate and Generate ARM template'
    
    # Publish the artifact to be used as a source for a release pipeline.
    
    - task: PublishPipelineArtifact@1
      inputs:
        targetPath: '$(Build.Repository.LocalPath)/<folder-of-the-package.json-file>/ArmTemplate' #replace with the package.json folder
        artifact: 'ArmTemplates'
        publishLocation: 'pipeline'
    
  4. Escriba el código de YAML. Usa el archivo YAML como punto de partida.

  5. Guárdelo y ejecútelo. Si ha usado YAML, se desencadenará cada vez que se actualice la rama principal. Confirma que la ejecución tiene éxito y produce el ArmTemplates artefacto en los artefactos publicados de la pipeline.

Nota:

Los artefactos generados ya contienen scripts previos y posteriores al despliegue para los disparadores, así que no necesitas añadirlos manualmente. Sin embargo, cuando realices la implementación, debes consultar la documentación sobre cómo detener e iniciar desencadenadores para ejecutar el script proporcionado.

Descubre más sobre integración y entrega continua en Data Factory: Integración y entrega continua en Azure Data Factory.