Tecniche CI/CD con Git e le cartelle Git di Databricks (Repository)
Informazioni sulle tecniche per l'uso delle cartelle Git di Databricks nei flussi di lavoro CI/CD. Configurando le cartelle Git di Databricks nell'area di lavoro, è possibile usare il controllo del codice sorgente per i file di progetto nei repository Git ed è possibile integrarli nelle pipeline di progettazione dei dati.
La figura seguente illustra una panoramica delle tecniche e del flusso di lavoro.
Per una panoramica di CI/CD con Azure Databricks, vedere Che cos'è CI/CD su 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" che sono individuali per ogni utente e where gli utenti apportano modifiche al codice.
Nella cartella utente nelle cartelle Git di Databricks clonare il repository remoto. È consigliabile creare un nuovo ramo di funzionalità o select 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 già set l'integrazione git.
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.
- Clonare il repository Git esistente nell'area di lavoro di Databricks.
- Usare l'interfaccia utente delle cartelle Git per creare un ramo di funzionalità dal ramo principale. In questo esempio viene usato un singolo ramo di funzionalità
feature-b
per semplicità. È possibile creare e usare più rami di funzionalità per svolgere il proprio lavoro. - Apportare le modifiche ai notebook di Azure Databricks e ad altri file nel repository.
- Eseguire il commit e il push delle modifiche nel provider Git.
- I collaboratori possono ora clonare il repository Git nella propria cartella utente.
- Lavorando a un nuovo ramo, un collega apporta modifiche ai notebook e ad altri file nella cartella Git.
- Il collaboratore esegue il commit e inserisce le modifiche nel provider Git.
- Per unire le modifiche da altri rami o riassegnare il ramo feature-b in Databricks, nell'interfaccia utente delle cartelle Git usare uno dei flussi di lavoro seguenti:
-
Eseguire il merge dei rami. Se non è presente alcun conflitto, viene eseguito il push dell'unione nel repository Git remoto usando
git push
. - Eseguire nuovamente il database in un altro ramo.
-
Eseguire il merge dei rami. Se non è presente alcun conflitto, viene eseguito il push dell'unione nel repository Git remoto usando
- 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 direttamente al repository Git che esegue il backup della cartella 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: Set un repository Git di produzione e chiamare API Repos per update 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 Git con i processi.
Configurare Opzione 2: una cartella Git di produzione e un'automazione Git Set.
In questa opzione, si set una cartella Git di produzione e un'automazione per update la cartella Git al momento della fusione.
Passaggio 1: Set nelle 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 main
per la produzione, la cartella Git “production” deve avere il ramo main
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.
Passaggio 2: Set aggiornamenti automatici alle cartelle Git di Databricks con l'API delle cartelle Git
Per mantenere una cartella Git in Databricks alla versione più recente, è possibile set l'automazione Git per chiamare l'API Repos. Nel provider Git, set l'automazione che, dopo ogni fusione riuscita di una richiesta di pull nel ramo principale, chiama l'endpoint Repos API nella cartella Git appropriata per update aggiornare alla versione più recente.
Ad esempio, in GitHub questa operazione può essere ottenuta con GitHub Actions. Per ulteriori informazioni, vedere 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 pacchetto databricks-sdk
non è stato installato in precedenza. Eseguire nuovamente il comando senza il flag --upgrade
: %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
o Terraform. Non è possibile usare l'interfaccia utente di Azure Databricks.
Per creare e gestire entità servizio per 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:
- Creare un'entità servizio con Azure Databricks.
- Aggiungi il git credentials: usa il PAT del tuo provider Git per il principale del servizio.
Per set le entità servizio e quindi aggiungere il provider Git credentials:
- Creare un'entità servizio. Vedere Eseguire processi con entità servizio.
- Creare un token di Microsoft Entra ID per un’entità servizio.
- Dopo aver creato un'entità servizio, aggiungerla all'area di lavoro di Azure Databricks con API Entità servizio.
- Aggiungi il tuo provider Git
alla tua area di lavoro con il tuo token ID Microsoft Entra e l'API 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 Git credentials 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
- È stata creata una cartella Git in un'area di lavoro di Databricks che monitora il ramo di base in cui viene eseguito il merge.
- Si dispone di un pacchetto Python che crea gli artefatti da inserire in un percorso DBFS. Il codice deve:
-
Update il repository associato al tuo ramo preferito (come
development
) per includere le versioni più recenti dei tuoi notebook. - Compilare tutti gli artefatti e copiarli nel percorso della libreria.
- Sostituire le ultime versioni degli artefatti di compilazione per evitare having di update manualmente le versioni degli artefatti nel processo.
-
Update il repository associato al tuo ramo preferito (come
Creare un flusso di lavoro CI/CD automatizzato
Set segreti in modo che il codice possa accedere all'area di lavoro di Databricks. Aggiungere i segreti seguenti al repository Github:
-
DEPLOYMENT_TARGET_URL: Set imposta questo all'URL dell'area di lavoro. Non includere la
/?o
sottostringa. - DEPLOYMENT_TARGET_TOKEN: Set impostare questo su un token di accesso personale (PAT) di Databricks. È possibile generate un PAT di Databricks seguendo le istruzioni in autenticazione del token di accesso personale di Azure Databricks.
-
DEPLOYMENT_TARGET_URL: Set imposta questo all'URL dell'area di lavoro. Non includere la
Passare alla scheda Azioni del repository Git e fare clic sul pulsante Nuovo flusso di lavoro. Nella parte superiore della pagina, selectSet configura un flusso di lavoro e incolla questo script:
# 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: paths-ignore: - .github 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 environment: development env: DATABRICKS_HOST: ${{ secrets.DEPLOYMENT_TARGET_URL }} DATABRICKS_TOKEN: ${{ secrets.DEPLOYMENT_TARGET_TOKEN }} REPO_PATH: /Workspace/Users/someone@example.com/workspace-builder DBFS_LIB_PATH: dbfs:/path/to/libraries/ 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@v3 - name: Setup Python uses: actions/setup-python@v3 with: # Version range or exact version of a Python version to use, using SemVer's version range syntax. python-version: 3.8 # Download the Databricks CLI. See https://github.com/databricks/setup-cli - uses: databricks/setup-cli@main - name: Install mods run: | pip install pytest setuptools wheel - 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 ${{env.REPO_PATH}} --branch "${{ steps.extract_branch.outputs.branch }}" - name: Build Wheel and send to Databricks DBFS workspace 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
Update la seguente variabile di ambiente values con la tua:
-
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: il percorso nell'area di lavoro di Databricks nella cartella Git where notebook verrà aggiornato.
-
LATEST_WHEEL_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
.
-
DBFS_LIB_PATH: il percorso in DBFS alle librerie (ruote) che verranno usate in questa automazione, che inizia con
Select Eseguire il commit delle modifiche... 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 confermare che le azioni siano riuscite.