CI/CD-technieken met Git- en Databricks Git-mappen (opslagplaatsen)

Leer technieken voor het gebruik van Databricks Git-mappen in CI/CD-werkstromen. Het configureren van Databricks Git-mappen in de werkruimte biedt broncodebeheer voor projectbestanden in Git-opslagplaatsen.

In de volgende afbeelding ziet u een overzicht van de technieken en werkstroom.

Overzicht van CI/CD-technieken voor Git-mappen.

Zie Wat is CI/CD in Azure Databricks?voor een overzicht van CI/CD met Azure Databricks.

Ontwikkelingsstroom

Databricks Git-mappen hebben mappen op gebruikersniveau. Mappen op gebruikersniveau worden automatisch gemaakt wanneer gebruikers voor het eerst een externe opslagplaats klonen. U kunt Databricks Git-mappen in gebruikersmappen beschouwen als 'lokale kassa's' die afzonderlijk zijn voor elke gebruiker en waar gebruikers wijzigingen aanbrengen in hun code.

Kloon uw externe opslagplaats in uw gebruikersmap in Databricks Git-mappen. U kunt het beste een nieuwe functievertakking maken of een eerder gemaakte vertakking voor uw werk selecteren in plaats van rechtstreeks wijzigingen door te voeren en naar de hoofdvertakking te pushen. U kunt wijzigingen aanbrengen, doorvoeren en pushen in die vertakking. Wanneer u klaar bent om uw code samen te voegen, kunt u dit doen in de gebruikersinterface van Git-mappen.

Vereisten

Voor deze werkstroom moet u uw Git-integratie al hebben ingesteld.

Notitie

Databricks raadt aan dat elke ontwikkelaar werkt op een eigen functiebranch. Zie Samenvoegingsconflicten oplossen voor informatie over het oplossen van samenvoegingsconflicten.

Samenwerken in Git-mappen

De volgende werkstroom maakt gebruik van een vertakking feature-b die is gebaseerd op de hoofdbranch.

  1. Kloon uw bestaande Git-opslagplaats naar uw Databricks-werkruimte.
  2. Gebruik de gebruikersinterface van Git-mappen om een functiebranch te maken vanuit de hoofdbranch . In dit voorbeeld wordt één functiebranch feature-b gebruikt voor het gemak. U kunt meerdere functiebranches maken en gebruiken om uw werk te doen.
  3. Breng uw wijzigingen aan in Azure Databricks-notebooks en andere bestanden in de opslagplaats.
  4. Voer uw wijzigingen door en push deze naar uw Git-provider.
  5. Inzenders kunnen nu de Git-opslagplaats klonen in hun eigen gebruikersmap.
    1. Een collega werkt aan een nieuwe vertakking en brengt wijzigingen aan in de notebooks en andere bestanden in de Git-map.
    2. De inzender doorvoert en pusht de wijzigingen naar de Git-provider.
  6. Als u wijzigingen van andere vertakkingen wilt samenvoegen of de functie-b-vertakking in Databricks wilt herbaseeren, gebruikt u een van de volgende werkstromen in de gebruikersinterface van Git-mappen:
  7. Wanneer u klaar bent om uw werk samen te voegen met de externe Git-opslagplaats en main -vertakking, gebruikt u de gebruikersinterface van Git-mappen om de wijzigingen van functie b samen te voegen. Als u wilt, kunt u in plaats daarvan wijzigingen in uw Git-provider samenvoegen.

Werkstroom voor productietaak

Databricks Git-mappen bieden twee opties voor het uitvoeren van uw productietaken:

  • Optie 1: Geef een externe Git-verwijzing op in de taakdefinitie. Voer bijvoorbeeld een specifiek notebook uit in de main vertakking van een Git-opslagplaats.
  • Optie 2: Stel een Git-productieopslagplaats in en roep opslagplaats-API's aan om deze programmatisch bij te werken. Voer taken uit in de Git-map databricks die deze externe opslagplaats kloont. De API-aanroep opslagplaatsen moet de eerste taak in de taak zijn.

Optie 1: Taken uitvoeren met behulp van notebooks in een externe opslagplaats

Vereenvoudig het taakdefinitieproces en behoud één bron van waarheid door een Azure Databricks-taak uit te voeren met behulp van notebooks die zich in een externe Git-opslagplaats bevinden. Deze Git-verwijzing kan een Git-doorvoer, tag of vertakking zijn en wordt door u verstrekt in de taakdefinitie.

Zo voorkomt u onbedoelde wijzigingen in uw productietaak, bijvoorbeeld wanneer een gebruiker lokale wijzigingen aanbrengt in een productieopslagplaats of vertakkingen. Ook wordt de CD-stap geautomatiseerd, omdat u geen afzonderlijke Git-map voor productie hoeft te maken in Databricks, machtigingen voor deze map hoeft te beheren en deze up-to-date te houden.

Zie Versiebeheerde broncode gebruiken in een Azure Databricks-taak.

Optie 2: Een Git-productiemap en Git-automatisering instellen

In deze optie stelt u een Git-productiemap en automatisering in om de Git-map bij te werken bij samenvoeging.

Stap 1: Mappen op het hoogste niveau instellen

De beheerder maakt niet-gebruikers mappen op het hoogste niveau. De meest voorkomende use-case voor deze mappen op het hoogste niveau is het maken van ontwikkelings-, faserings- en productiemappen die Databricks Git-mappen bevatten voor de juiste versies of vertakkingen voor ontwikkeling, fasering en productie. Als uw bedrijf bijvoorbeeld de main vertakking gebruikt voor productie, moet in de Git-map 'productie' de main vertakking zijn uitgecheckt.

Normaal gesproken zijn machtigingen voor deze mappen op het hoogste niveau alleen-lezen voor alle niet-beheerders in de werkruimte. Voor dergelijke mappen op het hoogste niveau wordt u aangeraden alleen service-principal(s) met de machtigingen CAN EDIT en CAN MANAGE te bieden om onbedoelde bewerkingen voor uw productiecode door werkruimtegebruikers te voorkomen.

Git-mappen op het hoogste niveau.

Stap 2: Automatische updates instellen voor Databricks Git-mappen met de API voor Git-mappen

Als u een Git-map in Databricks in de nieuwste versie wilt bewaren, kunt u Git-automatisering instellen om de OPSLAGPLAATS-API aan te roepen. Stel in uw Git-provider automatisering in die na elke geslaagde samenvoeging van een pull-aanvraag in de hoofdvertakking het API-eindpunt voor opslagplaatsen in de juiste Git-map aanroept om deze bij te werken naar de nieuwste versie.

Op GitHub kan dit bijvoorbeeld worden bereikt met GitHub Actions. Zie de OPSLAGPLAATS-API voor meer informatie.

Als u een Databricks REST API wilt aanroepen vanuit een Databricks-notebookcel, installeert u eerst de Databricks SDK met %pip install databricks-sdk --upgrade (voor de nieuwste Databricks REST API's) en importeert u ApiClient vervolgens uit databricks.sdk.core.

Notitie

Als %pip install databricks-sdk --upgrade er een fout wordt geretourneerd dat het pakket niet kan worden gevonden, is het databricks-sdk pakket nog niet eerder geïnstalleerd. Voer de opdracht opnieuw uit zonder de --upgrade vlag: %pip install databricks-sdk.

U kunt ook Databricks SDK-API's uitvoeren vanuit een notebook om de service-principals voor uw werkruimte op te halen. Hier volgt een voorbeeld van het gebruik van Python en de Databricks SDK voor Python.

U kunt ook hulpprogramma's zoals curlPostman of Terraform gebruiken. U kunt de gebruikersinterface van Azure Databricks niet gebruiken.

Zie Service-principals beheren voor meer informatie over service-principals in Azure Databricks. Zie Service-principals voor CI/CD voor informatie over service-principals en CI/CD. Lees De Databricks SDK voor Python gebruiken vanuit een Databricks-notebook voor meer informatie over het gebruik van de Databricks SDK vanuit een Databricks-notebook.

Een service-principal gebruiken met Databricks Git-mappen

De hierboven genoemde werkstromen uitvoeren met service-principals:

  1. Maak een service-principal met Azure Databricks.
  2. Voeg de Git-referenties toe: Gebruik uw Git-provider PAT voor de service-principal.

Om service-principals in te stellen en vervolgens referenties voor de Git-provider toe te voegen:

  1. Een service-principal maken. Zie Taken uitvoeren met service-principals.
  2. Maak een Microsoft Entra ID-token voor een service-principal.
  3. Nadat u een service-principal hebt gemaakt, voegt u deze toe aan uw Azure Databricks-werkruimte met de Service Principals-API.
  4. Voeg uw Git-providerreferenties toe aan uw werkruimte met uw Microsoft Entra ID-token en de Git Credentials-API.

Terraform-integratie

U kunt ook Databricks Git-mappen beheren in een volledig geautomatiseerde installatie met behulp van Terraform en databricks_repo:

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

Als u Terraform wilt gebruiken om Git-referenties toe te voegen aan een service-principal, voegt u de volgende configuratie toe:

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

Een geautomatiseerde CI/CD-pijplijn configureren met Databricks Git-mappen

Hier volgt een eenvoudige automatisering die kan worden uitgevoerd als een GitHub Action.

Vereisten

  1. U hebt een Git-map gemaakt in een Databricks-werkruimte waarmee de basisbranch wordt bijgehouden die wordt samengevoegd.
  2. U hebt een Python-pakket waarmee de artefacten in een DBFS-locatie worden gemaakt. Uw code moet:
    • Werk de opslagplaats bij die is gekoppeld aan uw voorkeursbranch (zoals development) om de nieuwste versies van uw notebooks te bevatten.
    • Bouw eventuele artefacten en kopieer deze naar het bibliotheekpad.
    • Vervang de laatste versies van buildartefacten om te voorkomen dat u artefactversies handmatig moet bijwerken in uw taak.

Stappen

Notitie

Stap 1 moet worden uitgevoerd door een beheerder van de Git-opslagplaats.

  1. Stel geheimen in zodat uw code toegang heeft tot de Databricks-werkruimte. Voeg de volgende geheimen toe aan de Github-opslagplaats:

  2. Navigeer naar het tabblad Acties van uw Git-opslagplaats en klik op de knop Nieuwe werkstroom . Selecteer boven aan de pagina de optie Zelf een werkstroom instellen en plak dit script:

    De koppeling 'zelf een werkstroom instellen' in de gebruikersinterface van GitHub Actions

    # 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. Werk de volgende omgevingsvariabelewaarden bij met uw eigen waarden:

    • DBFS_LIB_PATH: het pad in DBFS naar de bibliotheken (wielen) die u in deze automatisering gaat gebruiken, dat begint met dbfs:. Bijvoorbeelddbfs:/mnt/myproject/libraries.
    • REPO_PATH: het pad in uw Databricks-werkruimte naar de Git-map waar notebooks worden bijgewerkt. Bijvoorbeeld: /Repos/Develop.
    • LATEST_WHEEL_NAME: de naam van het laatst gecompileerde Python-wielbestand (.whl). Dit wordt gebruikt om te voorkomen dat wielversies handmatig worden bijgewerkt in uw Databricks-taken. Bijvoorbeeld: your_wheel-latest-py3-none-any.whl.
  4. Selecteer Wijzigingen doorvoeren... om het script door te voeren als een GitHub Actions-werkstroom. Zodra de pull-aanvraag voor deze werkstroom is samengevoegd, gaat u naar het tabblad Acties van de Git-opslagplaats en controleert u of de acties zijn geslaagd.