Dela via


CI/CD-tekniker med Git- och Databricks Git-mappar (Repos)

Lär dig tekniker för att använda Databricks Git-mappar i CI/CD-arbetsflöden. Genom att konfigurera Databricks Git-mappar på arbetsytan kan du använda källkontroll för projektfiler i Git-lagringsplatser och integrera dem i dina datateknikpipelines.

Följande bild visar en översikt över tekniker och arbetsflöden.

Översikt över CI/CD-tekniker för Git-mappar.

En översikt över CI/CD med Azure Databricks finns i Vad är CI/CD på Azure Databricks?.

Utvecklingsflöde

Databricks Git-mappar har mappar på användarnivå. Mappar på användarnivå skapas automatiskt när användarna först klonar en fjärrlagringsplats. Du kan se Databricks Git-mappar i användarmappar som "lokala utcheckningar" som är enskilda för varje användare och där användarna gör ändringar i sin kod.

Klona fjärrlagringsplatsen i din användarmapp i Databricks Git-mappar. Bästa praxis är att skapa en ny funktionsgren eller välja en tidigare skapad gren för ditt arbete, i stället för att direkt genomföra och push-överföra ändringar till huvudgrenen. Du kan göra ändringar, checka in och skicka ändringar i den grenen. När du är redo att slå samman koden kan du göra det i användargränssnittet för Git-mappar.

Krav

Det här arbetsflödet kräver att du redan har konfigurerat git-integreringen.

Kommentar

Databricks rekommenderar att varje utvecklare arbetar på sin egen funktionsgren. Information om hur du löser sammanslagningskonflikter finns i Lösa sammanslagningskonflikter.

Samarbeta i Git-mappar

Följande arbetsflöde använder en gren som heter feature-b som baseras på huvudgrenen.

  1. Klona din befintliga Git-lagringsplats till databricks-arbetsytan.
  2. Använd användargränssnittet för Git-mappar för att skapa en funktionsgren från huvudgrenen. I det här exemplet används en enda funktionsgren feature-b för enkelhetens skull. Du kan skapa och använda flera funktionsgrenar för att utföra ditt arbete.
  3. Gör dina ändringar i Azure Databricks-notebook-filer och andra filer på lagringsplatsen.
  4. Checka in och skicka ändringarna till Git-providern.
  5. Deltagare kan nu klona Git-lagringsplatsen till sin egen användarmapp.
    1. När du arbetar med en ny gren gör en medarbetare ändringar i notebook-filerna och andra filer i Git-mappen.
    2. Deltagaren checkar in och push-överför sina ändringar till Git-providern.
  6. Om du vill sammanfoga ändringar från andra grenar eller ändra bas på funktion-b-grenen i Databricks använder du något av följande arbetsflöden i användargränssnittet för Git-mappar:
  7. När du är redo att koppla ditt arbete till git-fjärrlagringsplatsen och main -grenen använder du användargränssnittet för Git-mappar för att sammanfoga ändringarna från feature-b. Om du vill kan du i stället sammanfoga ändringar direkt till Git-lagringsplatsen som säkerhetskopierar din Git-mapp.

Arbetsflöde för produktionsjobb

Databricks Git-mappar innehåller två alternativ för att köra dina produktionsjobb:

  • Alternativ 1: Ange en git-fjärrreferens i jobbdefinitionen. Kör till exempel en specifik notebook-fil i grenen main av en Git-lagringsplats.
  • Alternativ 2: Konfigurera en Git-produktionslagringsplats och anropa Repos-API:er för att uppdatera den programmatiskt. Kör jobb mot Mappen Databricks Git som klonar den här fjärrlagringsplatsen. Api-anropet för lagringsplatser bör vara den första uppgiften i jobbet.

Alternativ 1: Köra jobb med notebook-filer på en fjärrlagringsplats

Förenkla jobbdefinitionsprocessen och behåll en enda sanningskälla genom att köra ett Azure Databricks-jobb med hjälp av notebook-filer som finns på en fjärransluten Git-lagringsplats. Den här Git-referensen kan vara en Git-incheckning, tagg eller gren och tillhandahålls av dig i jobbdefinitionen.

Detta förhindrar oavsiktliga ändringar i produktionsjobbet, till exempel när en användare gör lokala ändringar i en produktionslagringsplats eller växlar grenar. Det automatiserar också CD-steget eftersom du inte behöver skapa en separat Git-mapp för produktion i Databricks, hantera behörigheter för den och hålla den uppdaterad.

Se Använda Git med jobb.

Alternativ 2: Konfigurera en Git-produktionsmapp och Git-automatisering

I det här alternativet konfigurerar du en Git-produktionsmapp och automatisering för att uppdatera Git-mappen vid sammanslagning.

Steg 1: Konfigurera mappar på översta nivån

Administratören skapar mappar på den översta nivån som inte är användare. Det vanligaste användningsfallet för dessa mappar på den översta nivån är att skapa utvecklings-, mellanlagrings- och produktionsmappar som innehåller Databricks Git-mappar för lämpliga versioner eller grenar för utveckling, mellanlagring och produktion. Om ditt företag till exempel använder grenen main för produktion måste git-mappen "produktion" ha grenen main utcheckad i den.

Vanligtvis är behörigheter på dessa mappar på den översta nivån skrivskyddade för alla icke-administratörsanvändare på arbetsytan. För sådana mappar på den översta nivån rekommenderar vi att du endast tillhandahåller tjänstens huvudnamn med behörigheten KAN REDIGERA och KAN HANTERA för att undvika oavsiktliga ändringar i produktionskoden av arbetsyteanvändare.

Git-mappar på den översta nivån.

Steg 2: Konfigurera automatiska uppdateringar av Databricks Git-mappar med Git-mapp-API:et

Om du vill behålla en Git-mapp i Databricks i den senaste versionen kan du konfigurera Git Automation för att anropa Repos-API:et. I Git-providern konfigurerar du automatisering som efter varje lyckad sammanslagning av en PR till huvudgrenen anropar repos-API-slutpunkten på lämplig Git-mapp för att uppdatera den till den senaste versionen.

På GitHub kan detta till exempel uppnås med GitHub Actions. Mer information finns i API:et för lagringsplatser.

Använd en tjänsthuvudprincip för automatisering med Databricks Git-mappar

Du kan använda antingen Azure Databricks-kontokonsolen eller Databricks CLI för att skapa ett huvudnamn för tjänsten som har behörighet att komma åt din arbetsytas Git-mappar.

Information om hur du skapar ett nytt huvudnamn för tjänsten finns i Hantera tjänstens huvudnamn. När du har ett huvudnamn för tjänsten på din arbetsyta kan du länka dina Git-autentiseringsuppgifter till den så att den kan komma åt din arbetsytas Git-mappar som en del av din automatisering.

Auktorisera ett huvudnamn för tjänsten för åtkomst till Git-mappar

Så här ger du auktoriserad åtkomst till dina Git-mappar för ett huvudnamn för tjänsten med hjälp av Azure Databricks-kontokonsolen:

  1. Logga in på din Azure Databricks-arbetsyta. Du måste ha administratörsbehörighet till din arbetsyta för att kunna utföra de här stegen. Om du inte har administratörsbehörighet för din arbetsyta kan du begära dem eller kontakta kontoadministratören.

  2. I det övre högra hörnet på en sida klickar du på ditt användarnamn och väljer sedan Inställningar.

  3. Välj identitet och åtkomst under Arbetsytans administratör i det vänstra navigeringsfönstret och klicka sedan på knappen Hantera för tjänsthuvudmän.

    Sidan Tjänstens huvudnamn under arbetsyteinställningar

  4. I listan över tjänstens huvudnamn väljer du den som du vill uppdatera med Git-autentiseringsuppgifter. Du kan också skapa ett nytt huvudnamn för tjänsten genom att välja Lägg till tjänstens huvudnamn.

    Skapa eller lägga till en tjänstprincip via Databricks-kontokonsolen

  5. Välj fliken Git-integrering. (Om du inte har skapat tjänstens huvudnamn eller inte har tilldelats tjänstens huvudnamnshanterarbehörighet på den kommer den att vara nedtonad.) Under den väljer du Git-provider för autentiseringsuppgifterna (till exempel GitHub), väljer Länka Git-kontooch väljer sedan Länk.

    Du kan också använda en personlig Git-åtkomsttoken (PAT) om du inte vill länka dina egna Git-autentiseringsuppgifter. Om du vill använda en PAT i stället väljer du Personlig åtkomsttoken och anger tokeninformationen för Git-kontot som ska användas när du autentiserar tjänstens huvudnamns åtkomst. Mer information om hur du hämtar en PAT från en Git-provider finns i Konfigurera Git-autentiseringsuppgifter & ansluta en fjärransluten lagringsplats till Azure Databricks.

    Länka dina Git-inloggningsuppgifter till en Databricks-servicerepresentant

  6. Du uppmanas att välja det Git-användarkonto som ska länkas. Välj det Git-användarkonto som tjänstens huvudnamn ska använda för åtkomst och välj Fortsätt. (Om du inte ser det användarkonto som du vill använda väljer du Använd ett annat konto.)

  7. I nästa dialogruta ska du välja Auktorisera Databricks. Du ser kort meddelandet "Länka konto..." och sedan den uppdaterade informationen om tjänstens huvudnamn.

    bekräftelseskärmen för framgångsrikt länkade Git-autentiseringsuppgifter

Tjänstehuvudnamnet du valde kommer nu att använda de länkade Git-kontouppgifterna när den kommer åt dina Git-mappresurser i Azure Databricks-arbetsytan som en del av din automatisering.

Terraform-integrering

Du kan också hantera Databricks Git-mappar i en helt automatiserad installation med Terraform och databricks_repo:

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

Lägg till följande konfiguration om du vill använda Terraform för att lägga till Git-autentiseringsuppgifter i tjänstens huvudnamn:

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

Konfigurera en automatiserad CI/CD-pipeline med Databricks Git-mappar

Här är en enkel automatisering som kan köras som en GitHub-åtgärd.

Krav

  • Du har skapat en Git-mapp på en Databricks-arbetsyta som spårar basgrenen som sammanfogas till.
  • Du har ett Python-paket som skapar artefakterna som ska placeras på en DBFS-plats. Koden måste:
    • Uppdatera lagringsplatsen som är associerad med din föredragna gren (till exempel development) så att den innehåller de senaste versionerna av dina notebook-filer.
    • Skapa artefakter och kopiera dem till bibliotekssökvägen.
    • Ersätt de senaste versionerna av byggartefakter för att undvika att behöva uppdatera artefaktversioner manuellt i jobbet.

Skapa ett automatiserat CI/CD-arbetsflöde

  1. Konfigurera hemligheter så att koden kan komma åt Databricks-arbetsytan. Lägg till följande hemligheter på Github-lagringsplatsen:

    • DEPLOYMENT_TARGET_URL: Ställ in detta på din arbetsyte-URL. Ta inte med delsträngen /?o .
    • DEPLOYMENT_TARGET_TOKEN: Ställ in detta på en Personlig åtkomsttoken för Databricks (PAT). Du kan generera en Databricks PAT genom att följa anvisningarna i Azure Databricks personliga åtkomsttokenautentisering.
  2. Gå till fliken Åtgärder i Git-lagringsplatsen och klicka på knappen Nytt arbetsflöde. Längst upp på sidan väljer du Konfigurera ett arbetsflöde själv och klistrar in det här skriptet:

    Länken

    # 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
    
  3. Uppdatera följande miljövariabelvärden med dina egna:

    • DBFS_LIB_PATH: Sökvägen i DBFS till de bibliotek (hjul) som du ska använda i den här automatiseringen, som börjar med dbfs:. Till exempeldbfs:/mnt/myproject/libraries.
    • REPO_PATH: Sökvägen i Databricks-arbetsytan till Git-mappen där notebook-filer uppdateras.
    • LATEST_WHEEL_NAME: Namnet på den senast kompilerade Python-hjulfilen (.whl). Detta används för att undvika att manuellt uppdatera hjulversioner i dina Databricks-jobb. Exempel: your_wheel-latest-py3-none-any.whl
  4. Välj Genomför ändringar... för att checka in skriptet som ett GitHub Actions-arbetsflöde. När pull-begäran för det här arbetsflödet har sammanfogats går du till fliken Åtgärder på Git-lagringsplatsen och bekräftar att åtgärderna har slutförts.