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

SE APLICA A: Azure Data Factory Azure Synapse Analytics

Sugerencia

Pruebe Data Factory en Microsoft Fabric, una solución de análisis todo en uno para empresas. Microsoft Fabric abarca todo, desde el movimiento de datos hasta la ciencia de datos, el análisis en tiempo real, la inteligencia empresarial y los informes. ¡Obtenga más información sobre cómo iniciar una nueva evaluación gratuita!

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 implica el traslado de canalizaciones de Data Factory de un entorno, como desarrollo, prueba o producción, a otro. Data Factory usa plantillas de Azure Resource Manager (plantillas de ARM) para almacenar la configuración de las diversas 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:

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

Para obtener más información, consulte Integración y entrega continuas en 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 característica Publicación automatizada toma las características Validar todo y Exportar plantilla de ARM de la experiencia de usuario de Data Factory y hace que la lógica se consuma a través de un paquete 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 proporcionará a las canalizaciones de CI/CD una experiencia de integración continua más verdadera.

Nota:

Asegúrese de usar la versión 18.x del nodo y su versión compatible para evitar errores que pueden producirse debido a la incompatibilidad del paquete con versiones anteriores.

Flujo de CI/CD actual

  1. Cada usuario realiza cambios en sus ramas privadas.
  2. No se permiten inserciones en la rama principal. 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.

Diagram that shows the current CI/CD flow.

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 se permiten inserciones en la rama principal. Los usuarios deben crear una solicitud de incorporación de cambios para realizar cambios.
  3. La compilación de canalización de Azure DevOps se desencadena cada vez que se realiza una nueva confirmación en la rama principal. Valida los recursos y genera una plantilla de ARM como artefacto si la validación se realiza correctamente.
  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 hay una nueva compilación disponible.

Diagram that shows the new CI/CD flow.

¿Qué ha cambiado?

  • Ahora tenemos un proceso de compilación que usa una canalización de compilación de DevOps.
  • La canalización de compilación usa el paquete de NPM de ADFUtilities, que validará todos los recursos y generará las plantillas de ARM. Estas plantillas pueden ser únicas y vinculadas.
  • La canalización de compilación se encarga de la validación de los recursos de Data Factory y de la generación de la plantilla de ARM, en lugar de la interfaz de usuario de Data Factory (botónPublicar).
  • La definición de versión de DevOps consumirá ahora esta canalización de compilación nueva 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:

  • Exportación de una plantilla de Resource Manager
  • Validación

Exportación de una plantilla de Resource Manager

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 de ARM. Este es un ejemplo con un grupo de recursos denominado 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 Id. de los recursos 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 iniciar o detener únicamente los desencadenadores actualizados ahora está disponible con carácter general y se combina con el comando mostrado anteriormente.

Nota

La plantilla de ARM generada no se publica en la versión actual de la fábrica. La implementación debe realizarse mediante una canalización 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 Id. de los recursos de Data Factory con el formato /subscriptions/<subId>/resourceGroups/<rgName>/providers/Microsoft.DataFactory/factories/<dfName>.

Creación de una canalización de Azure

Aunque los paquetes de npm se pueden consumir de varias maneras, una de las ventajas principales es su consumo a través de una Canalización de Azure. En cada fusión mediante combinación en la rama de colaboración, se puede desencadenar una canalización que primero valide todo el código y, a continuación, exporte la plantilla de ARM a un artefacto de compilación, que una canalización de versión puede consumir. La diferencia entre el proceso actual de CI/CD es que apuntará a la canalización de versión en este artefacto, en lugar de a la rama de adf_publish existente.

Para comenzar, siga estos pasos:

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

    Screenshot that shows the New pipeline button.

  2. Seleccione el repositorio en el que quiere guardar el script de YAML de la canalización. Se recomienda guardarlo en una carpeta de compilación en el mismo repositorio que los recursos de Data Factory. 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.

    Screenshot that shows Starter pipeline.

    # 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: '18.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 temmplate" 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/222f1459-6ebd-4896-82ab-652d5f6883cf/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. Se recomienda usar el archivo YAML como punto de partida.

  5. Guárdelo y ejecútelo. Si ha usado el archivo YAML, se desencadenará cada vez que se actualice la rama principal.

Nota:

Los artefactos generados ya contienen scripts previos y posteriores a la implementación de los desencadenadores, por lo que no es necesario agregarlos manualmente. Sin embargo, al implementar uno todavía tendría que hacer referencia a la documentación sobre la detención e inicio de desencadenadores para ejecutar el script proporcionado.

Obtenga más información sobre la integración y entrega continuas en Data Factory: Integración y entrega continuas en Azure Data Factory.