Tecniche CI/CD con le cartelle Git di Git e Databricks (Repos)

Informazioni sulle tecniche per l'uso delle cartelle Git di Databricks nei flussi di lavoro CI/CD. La configurazione delle cartelle Git di Databricks nell'area di lavoro fornisce il controllo del codice sorgente per i file di progetto nei repository Git.

La figura seguente illustra una panoramica delle tecniche e del flusso di lavoro.

Panoramica delle tecniche CI/CD per le cartelle Git.

Per una panoramica di CI/CD con Azure Databricks, vedere Che cos'è CI/CD in Azure Databricks?.

Flusso di sviluppo

Le cartelle Git di Databricks hanno cartelle a livello di utente. Le cartelle a livello di utente vengono create automaticamente quando gli utenti clonano per la prima volta un repository remoto. È possibile considerare le cartelle Git di Databricks nelle cartelle utente come "checkout locali" individuali per ogni utente e dove gli utenti apportano modifiche al codice.

Nella cartella utente nelle cartelle Git di Databricks clonare il repository remoto. Una procedura consigliata consiste nel creare un nuovo ramo di funzionalità o selezionare un ramo creato in precedenza per il lavoro, anziché eseguire direttamente il commit e il push delle modifiche nel ramo principale. È possibile apportare modifiche, eseguire il commit e il push delle modifiche in tale ramo. Quando si è pronti per unire il codice, è possibile farlo nell'interfaccia utente delle cartelle Git.

Requisiti

Questo flusso di lavoro richiede che l'integrazione git sia già stata configurata.

Nota

Databricks consiglia a ogni sviluppatore di funzionare nel proprio ramo di funzionalità. Per informazioni su come risolvere i conflitti di merge, vedere Risolvere i conflitti di merge.

Collaborare in cartelle Git

Il flusso di lavoro seguente usa un ramo denominato feature-b basato sul ramo principale.

  1. Clonare il repository Git esistente nell'area di lavoro di Databricks.
  2. Usare l'interfaccia utente delle cartelle Git per creare un ramo di funzionalità dal ramo principale. In questo esempio viene usato un singolo ramo feature-b di funzionalità per semplicità. È possibile creare e usare più rami di funzionalità per svolgere il proprio lavoro.
  3. Apportare le modifiche ai notebook di Azure Databricks e ad altri file nel repository.
  4. Eseguire il commit e il push delle modifiche nel provider Git.
  5. I collaboratori possono ora clonare il repository Git nella propria cartella utente.
    1. Lavorando a un nuovo ramo, un collega apporta modifiche ai notebook e ad altri file nella cartella Git.
    2. Il collaboratore esegue il commit e inserisce le modifiche nel provider Git.
  6. Per unire le modifiche da altri rami o ribasere il ramo feature-b in Databricks, nell'interfaccia utente delle cartelle Git usare uno dei flussi di lavoro seguenti:
  7. Quando si è pronti per unire il lavoro al repository Git remoto e main al ramo, usare l'interfaccia utente delle cartelle Git per unire le modifiche da feature-b. Se si preferisce, è invece possibile unire le modifiche nel provider Git.

Flusso di lavoro del processo di produzione

Le cartelle Git di Databricks offrono due opzioni per l'esecuzione dei processi di produzione:

  • Opzione 1: specificare un riferimento Git remoto nella definizione del processo. Ad esempio, eseguire un notebook specifico nel main ramo di un repository Git.
  • Opzione 2: configurare un repository Git di produzione e chiamare le API Repos per aggiornarla a livello di codice. Eseguire processi nella cartella Git di Databricks che clona questo repository remoto. La chiamata API Repos deve essere la prima attività del processo.

Opzione 1: Eseguire processi usando notebook in un repository remoto

Semplificare il processo di definizione del processo e mantenere un'unica origine di verità eseguendo un processo di Azure Databricks usando i notebook che si trovano in un repository Git remoto. Questo riferimento Git può essere un commit Git, un tag o un ramo e viene fornito dall'utente nella definizione del processo.

Ciò consente di evitare modifiche involontarie al processo di produzione, ad esempio quando un utente apporta modifiche locali in un repository di produzione o cambia rami. Automatizza anche il passaggio cd perché non è necessario creare una cartella Git di produzione separata in Databricks, gestirla e mantenerla aggiornata.

Vedere Usare il codice sorgente controllato dalla versione in un processo di Azure Databricks.

Opzione 2: Configurare una cartella Git di produzione e l'automazione Git

In questa opzione si configura una cartella Git di produzione e l'automazione per aggiornare la cartella Git in fase di unione.

Passaggio 1: Configurare le cartelle di primo livello

L'amministratore crea cartelle di primo livello non utente. Il caso d'uso più comune per queste cartelle di primo livello consiste nel creare cartelle di sviluppo, gestione temporanea e produzione contenenti cartelle Git di Databricks per le versioni o i rami appropriati per lo sviluppo, la gestione temporanea e la produzione. Ad esempio, se la società usa il ramo per la main produzione, la cartella Git "production" deve avere il main ramo estratto.

In genere le autorizzazioni per queste cartelle di primo livello sono di sola lettura per tutti gli utenti non amministratori all'interno dell'area di lavoro. Per tali cartelle di primo livello, è consigliabile fornire solo le entità servizio con le autorizzazioni CAN EDIT e CAN MANAGE per evitare modifiche accidentali al codice di produzione da parte degli utenti dell'area di lavoro.

Cartelle Git di primo livello.

Passaggio 2: Configurare gli aggiornamenti automatizzati per le cartelle Git di Databricks con l'API delle cartelle Git

Per mantenere una cartella Git in Databricks alla versione più recente, è possibile configurare l'automazione Git per chiamare l'API Repos. Nel provider Git configurare l'automazione che, dopo aver completato l'unione di una richiesta pull nel ramo principale, chiama l'endpoint DELL'API Repos nella cartella Git appropriata per aggiornarla alla versione più recente.

Ad esempio, in GitHub questa operazione può essere ottenuta con GitHub Actions. Per altre informazioni, vedere l'API Repos.

Per chiamare qualsiasi API REST di Databricks dall'interno di una cella del notebook di Databricks, installare prima Databricks SDK con %pip install databricks-sdk --upgrade (per le API REST di Databricks più recenti) e quindi importare ApiClient da databricks.sdk.core.

Nota

Se %pip install databricks-sdk --upgrade restituisce un errore che indica che il pacchetto non è stato trovato, il databricks-sdk pacchetto non è stato installato in precedenza. Eseguire di nuovo il comando senza il --upgrade flag : %pip install databricks-sdk.

È anche possibile eseguire api di Databricks SDK da un notebook per recuperare le entità servizio per l'area di lavoro. Ecco un esempio che usa Python e Databricks SDK per Python.

È anche possibile usare strumenti come curl, Postman o Terraform. Non è possibile usare l'interfaccia utente di Azure Databricks.

Per altre informazioni sulle entità servizio in Azure Databricks, vedere Gestire le entità servizio. Per informazioni sulle entità servizio e CI/CD, vedere Entità servizio per CI/CD. Per altre informazioni sull'uso di Databricks SDK da un notebook, vedere Usare Databricks SDK per Python dall'interno di un notebook di Databricks.

Usare un'entità servizio con le cartelle Git di Databricks

Per eseguire i flussi di lavoro indicati in precedenza con le entità servizio:

  1. Creare un'entità servizio con Azure Databricks.
  2. Aggiungere le credenziali git: usare il token di accesso personale del provider Git per l'entità servizio.

Per configurare le entità servizio e quindi aggiungere le credenziali del provider Git:

  1. Creare un'entità servizio. Vedere Eseguire processi con entità servizio.
  2. Creare un token ID Microsoft Entra per un'entità servizio.
  3. Dopo aver creato un'entità servizio, aggiungerla all'area di lavoro di Azure Databricks con l'API Entità servizio.
  4. Aggiungere le credenziali del provider Git all'area di lavoro con il token ID Microsoft Entra e l'API Credenziali Git.

Integrazione di Terraform

È anche possibile gestire le cartelle Git di Databricks in una configurazione completamente automatizzata usando Terraform e databricks_repo:

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

Per usare Terraform per aggiungere credenziali Git a un'entità servizio, aggiungere la configurazione seguente:

  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"
  }

Configurare una pipeline CI/CD automatizzata con le cartelle Git di Databricks

Ecco una semplice automazione che può essere eseguita come gitHub Action.

Requisiti

  1. È stata creata una cartella Git in un'area di lavoro di Databricks che monitora il ramo di base in cui viene eseguito il merge.
  2. Si dispone di un pacchetto Python che crea gli artefatti da inserire in un percorso DBFS. Il codice deve:
    • Aggiornare il repository associato al ramo preferito ( ad esempio development) per contenere le versioni più recenti dei notebook.
    • Compilare tutti gli artefatti e copiarli nel percorso della libreria.
    • Sostituire le ultime versioni degli artefatti di compilazione per evitare di dover aggiornare manualmente le versioni degli artefatti nel processo.

Passaggi

Nota

Il passaggio 1 deve essere eseguito da un amministratore del repository Git.

  1. Configurare i segreti in modo che il codice possa accedere all'area di lavoro di Databricks. Aggiungere i segreti seguenti al repository Github:

  2. Passare alla scheda Azioni del repository Git e fare clic sul pulsante Nuovo flusso di lavoro . Nella parte superiore della pagina selezionare Configura manualmente un flusso di lavoro e incollare questo script:

    Collegamento

    # 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. Aggiornare i valori delle variabili di ambiente seguenti con i propri:

    • DBFS_LIB_PATH: il percorso in DBFS alle librerie (ruote) che verranno usate in questa automazione, che inizia con dbfs:. Ad esempio, dbfs:/mnt/myproject/libraries.
    • REPO_PATH: percorso nell'area di lavoro di Databricks nella cartella Git in cui verranno aggiornati i notebook. Ad esempio: /Repos/Develop.
    • LATEST_WH edizione Enterprise L_NAME: nome del file wheel python compilato (.whl). Viene usato per evitare di aggiornare manualmente le versioni delle ruote nei processi di Databricks. Ad esempio: your_wheel-latest-py3-none-any.whl.
  4. Selezionare Commit changes (Commit changes) per eseguire il commit dello script come flusso di lavoro di GitHub Actions. Dopo aver unito la richiesta pull per questo flusso di lavoro, passare alla scheda Azioni del repository Git e verificare che le azioni siano riuscite.