Técnicas de CI/CD con carpetas de Git y Databricks Git (Repositorios)

Aprenda técnicas para usar carpetas de Git de Databricks en flujos de trabajo de CI/CD. La configuración de carpetas de Git de Databricks en el área de trabajo proporciona control de código fuente para los archivos de proyecto en repositorios de Git.

La figura siguiente muestra información general sobre las técnicas y el flujo de trabajo.

Introducción a las técnicas de CI/CD para carpetas de Git.

Para obtener información general sobre CI/CD con Azure Databricks, consulte ¿Qué es CI/CD en Azure Databricks?

Flujo de desarrollo

Las carpetas de Git de Databricks tienen carpetas de nivel de usuario. Las carpetas de nivel de usuario se crean automáticamente cuando los usuarios clonan por primera vez un repositorio remoto. Puede considerar las carpetas de Git de Databricks en carpetas de usuario como “comprobaciones locales” que son individuales para cada usuario y donde los usuarios realizan cambios en su código.

En la carpeta de usuario de las carpetas de Git de Databricks, clone el repositorio remoto. Un procedimiento recomendado es crear una nueva rama de características o seleccionar una rama creada previamente para su trabajo, en lugar de confirmar y enviar directamente los cambios en la rama principal. Puede realizar cambios, confirmar y enviar cambios en esa rama. Cuando esté listo para combinar el código, puede hacerlo en la interfaz de usuario de carpetas de Git.

Requisitos

Este flujo de trabajo requiere que ya haya configurado la integración con Git.

Nota:

Databricks recomienda que cada desarrollador trabaje en su propia rama de características. Para información sobre cómo resolver conflictos de combinación, consulte Resolución de conflictos de combinación.

Colaboración en carpetas de Git

El flujo de trabajo siguiente usa una rama llamada feature-b que se basa en la rama principal.

  1. Clone el repositorio de Git existente en el área de trabajo de Databricks.
  2. Use la interfaz de usuario de carpetas de Git para crear una rama de características desde la rama principal. En este ejemplo se usa una sola rama de características feature-b por motivos de simplicidad. Puede crear y usar varias ramas de características para realizar su trabajo.
  3. Realice las modificaciones en los cuadernos y otros archivos de Azure Databricks en el repositorio.
  4. Confirme e inserte los cambios en el repositorio de Git.
  5. Ahora, los colaboradores pueden clonar el repositorio de Git en su propia carpeta de usuario.
    1. Al trabajar en una nueva rama, un compañero de trabajo realiza cambios en los cuadernos y otros archivos de la carpeta Git.
    2. El colaborador confirma y envía sus cambios al proveedor de Git.
  6. Para combinar los cambios de otras ramas o volver a base de la rama característica-b en Databricks, en la interfaz de usuario de carpetas de Git, use uno de los flujos de trabajo siguientes:
  7. Cuando esté listo para combinar el trabajo con el repositorio de Git remoto y la rama de main, use la interfaz de usuario de carpetas de Git para combinar los cambios de característica-b. Si lo prefiere, puede combinar los cambios en el proveedor de Git.

Flujo de trabajo de producción

Las carpetas de Git de Databricks proporcionan dos opciones para ejecutar los trabajos de producción:

  • Opción 1: Proporcione una referencia remota de Git en la definición del trabajo. Por ejemplo, ejecute un cuaderno específico en la rama main de un repositorio de Git.
  • opción 2: configure un repositorio de Git de producción y llame a las API de Repos para actualizarlo mediante programación. Ejecute trabajos en la carpeta Git de Databricks que clona este repositorio remoto. La llamada de Repos API debe ser la primera tarea del trabajo.

Opción 1: Ejecute trabajos mediante cuadernos en un repositorio remoto

Simplifique el proceso de definición de trabajo y mantenga un único origen de verdad mediante la ejecución de un trabajo de Azure Databricks con cuadernos ubicadas en un repositorio de Git remoto. Esta referencia de Git puede ser una confirmación, etiqueta o rama de Git y la proporciona en la definición del trabajo.

Esto ayuda a evitar cambios accidentales en el trabajo de producción, como cuando un usuario realiza modificaciones locales en un repositorio de producción o cambia las ramas. También automatiza el paso de CD, ya que no es necesario crear una carpeta Git de producción independiente en Databricks, administrar permisos para él y mantenerla actualizada.

Consulte Usar el código fuente controlado por versiones en un trabajo de Azure Databricks.

opción 2: Configuración de una carpeta Git de producción y automatización de Git

En esta opción, configurará una carpeta Git de producción y automatización para actualizar la carpeta Git en combinación.

Paso 1: Configuración de las carpetas de nivel superior

El administrador crea carpetas de nivel superior que no son de usuario. El caso de uso más común para estas carpetas de nivel superior es crear carpetas de desarrollo, almacenamiento provisional y producción que contengan carpetas de Git de Databricks para las versiones o ramas adecuadas para desarrollo, almacenamiento provisional y producción. Por ejemplo, si la empresa usa la rama main para producción, la “carpeta Git de producción” debe tener desprotegida la rama main desprotegida.

Normalmente, los permisos en estas carpetas de nivel superior son de solo lectura para todos los usuarios que no son administradores del área de trabajo. Para estas carpetas de nivel superior, se recomienda proporcionar solo entidades de servicio con permisos CAN EDIT y CAN MANAGE para evitar modificaciones accidentales en el código de producción por parte de los usuarios del área de trabajo.

Carpetas de Git de nivel superior.

Paso 2: Configuración de actualizaciones automatizadas en carpetas de Git de Databricks con la API de carpetas de Git

Para mantener una carpeta de Git en Databricks en la versión más reciente, puede configurar la automatización de Git para llamar a la API de repositorios . En el proveedor de Git, configure la automatización que, después de cada combinación correcta de una solicitud de incorporación de cambios en la rama principal, llama al punto de conexión de la API repos en la carpeta Git adecuada para actualizarla a la versión más reciente.

Por ejemplo, en GitHub esto se puede lograr con Acciones de GitHub. Para más información, consulte Repos API.

Para llamar a cualquier API rest de Databricks desde una celda de cuaderno de Databricks, instale primero el SDK de Databricks con %pip install databricks-sdk --upgrade (para las API REST de Databricks más recientes) e importe ApiClient desde databricks.sdk.core.

Nota:

Si %pip install databricks-sdk --upgrade devuelve un error que indica que "No se encontró el paquete", el databricks-sdk paquete no se instaló previamente. Vuelva a ejecutar el comando sin la --upgrade marca : %pip install databricks-sdk.

También puede ejecutar las API del SDK de Databricks desde un cuaderno para recuperar las entidades de servicio del área de trabajo. Este es un ejemplo de uso de Python y el SDK de Databricks para Python.

También puede usar herramientas como curl, Postman o Terraform. No puede usar la interfaz de usuario de Azure Databricks.

Para más información sobre las entidades de servicio en Azure Databricks, consulte Administración de entidadesde servicio. Para obtener información sobre las entidades de servicio y CI/CD, consulte Entidades de servicio para CI/CD. Para más información sobre el uso del SDK de Databricks desde un cuaderno, consulte Uso del SDK de Databricks para Python desde un cuadernode Databricks.

Usar una entidad de servicio con carpetas de Git de Databricks

Para ejecutar los flujos de trabajo mencionados anteriormente con entidades de servicio:

  1. Cree una entidad de servicio con Azure Databricks.
  2. Agregue las credenciales de Git: use el PAT del proveedor de Git para la entidad de servicio.

Para configurar entidades de servicio y, a continuación, agregar las credenciales del proveedor de Git, siga estos pasos:

  1. Crear una entidad de servicio. Consulte Ejecución de trabajos con entidades de servicio.
  2. Cree un token de Microsoft Entra ID para una entidad de servicio.
  3. Después de crear una entidad de servicio, agréguela al área de trabajo de Azure Databricks con la API de entidades de servicio.
  4. Agregue las credenciales del proveedor de Git al área de trabajo mediante el uso del token de Microsoft Entra ID y la API de credenciales de Git.

Integración de Terraform

También puede administrar carpetas de Git de Databricks en una configuración totalmente automatizada mediante Terraform y databricks_repo:

resource "databricks_repo" "this" {
  url = "https://github.com/user/demo.git"
}

Para usar Terraform para agregar credenciales de Git a una entidad de servicio, agregue la siguiente configuración:

  provider "databricks" {
    # Configuration options
  }

  provider "databricks" {
    alias = "sp"
    host = "https://....cloud.databricks.com"
    token = databricks_obo_token.this.token_value
  }

  resource "databricks_service_principal" "sp" {
    display_name = "service_principal_name_here"
  }

  resource "databricks_obo_token" "this" {
    application_id   = databricks_service_principal.sp.application_id
    comment          = "PAT on behalf of ${databricks_service_principal.sp.display_name}"
    lifetime_seconds = 3600
  }

  resource "databricks_git_credential" "sp" {
    provider = databricks.sp
    depends_on = [databricks_obo_token.this]
    git_username          = "myuser"
    git_provider          = "azureDevOpsServices"
    personal_access_token = "sometoken"
  }

Configuración de una canalización automatizada de CI/CD con carpetas de Git de Databricks

Esta es una automatización sencilla que se puede ejecutar como una acción de GitHub.

Requisitos

  1. Ha creado una carpeta de Git en un área de trabajo de Databricks en la que se realiza el seguimiento de la rama base en la que se combina.
  2. Tiene un paquete de Python que crea los artefactos que se van a colocar en una ubicación de DBFS. El código debe:
    • Actualizar el repositorio asociado a la rama preferida (por ejemplo, development) para que contenga las versiones más recientes de los cuadernos.
    • Compilar los artefactos y copiarlos en la ruta de acceso de la biblioteca.
    • Reemplazar las últimas versiones de artefactos de compilación para evitar tener que actualizar manualmente las versiones de artefactos en el trabajo.

Pasos

Nota:

El paso 1 debe realizarse mediante un administrador del repositorio de Git.

  1. Configure secretos para que el código pueda acceder al área de trabajo de Databricks. Agregue los siguientes secretos al repositorio de Github:

  2. Vaya a la pestaña Acciones del repositorio de Git y haga clic en el botón Nuevo flujo de trabajo. En la parte superior de la página, seleccione Configurar un flujo de trabajo usted mismo y pegue este script:

    Vínculo

    # This is a basic automation workflow to help you get started with GitHub Actions.
    
    name: CI
    
      # Controls when the workflow will run
      on:
        # Triggers the workflow on push for main and dev branch
        push:
          branches:
            # Set your base branch name here
            - your-base-branch-name
    
      # A workflow run is made up of one or more jobs that can run sequentially or in parallel
      jobs:
        # This workflow contains a single job called "deploy"
        deploy:
          # The type of runner that the job will run on
          runs-on: ubuntu-latest
          env:
            DBFS_LIB_PATH: dbfs:/path/to/libraries/
            REPO_PATH: /Repos/path/here
            LATEST_WHEEL_NAME: latest_wheel_name.whl
    
          # Steps represent a sequence of tasks that will be executed as part of the job
          steps:
          # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
          - uses: actions/checkout@v2
    
          - name: Setup Python
            uses: actions/setup-python@v2
            with:
            # Version range or exact version of a Python version to use, using SemVer's version range syntax.
              python-version: 3.8
    
          - name: Install mods
            run: |
              pip install databricks-cli
              pip install pytest setuptools wheel
    
          - name: Configure CLI
            run: |
              echo "${{ secrets.DEPLOYMENT_TARGET_URL }} ${{ secrets.DEPLOYMENT_TARGET_TOKEN }}" | databricks configure --token
    
          - name: Extract branch name
            shell: bash
            run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
            id: extract_branch
    
          - name: Update Databricks Git folder
            run: |
              databricks repos update --path ${{env.REPO_PATH}} --branch "${{ steps.extract_branch.outputs.branch }}"
    
          - name: Build Wheel and send to Databricks workspace DBFS location
            run: |
              cd $GITHUB_WORKSPACE
              python setup.py bdist_wheel
              dbfs cp --overwrite ./dist/* ${{env.DBFS_LIB_PATH}}
              # there is only one wheel file; this line copies it with the original version number in file name and overwrites if that version of wheel exists; it does not affect the other files in the path
              dbfs cp --overwrite ./dist/* ${{env.DBFS_LIB_PATH}}${{env.LATEST_WHEEL_NAME}} # this line copies the wheel file and overwrites the latest version with it
    
  3. Actualice los siguientes valores de variable de entorno por los suyos:

    • DBFS_LIB_PATH: la ruta de acceso de DBFS a las bibliotecas (paquetes wheel) que usará en esta automatización, que comienza con dbfs:. Por ejemplo: dbfs:/mnt/myproject/libraries.
    • REPO_PATH: la ruta de acceso del área de trabajo de Databricks a la carpeta Git donde se actualizarán los cuadernos. Por ejemplo, /Repos/Develop.
    • LATEST_WHEEL_NAME: nombre del archivo de rueda de Python compilado por última vez (.whl). Esto se usa para evitar actualizar manualmente las versiones de wheel en los trabajos de Databricks. Por ejemplo, your_wheel-latest-py3-none-any.whl.
  4. Seleccione Confirmar cambios... para confirmar el script como un flujo de trabajo de Acciones de GitHub. Una vez combinada la solicitud de incorporación de cambios de este flujo de trabajo, vaya a la pestaña Acciones del repositorio de Git y confirme que las acciones se realizan correctamente.