Sdílet prostřednictvím


GitHub Actions

Důležité

Tato funkce je ve verzi Public Preview.

GitHub Actions spouští běhy vašich CI/CD procesů z úložišť na GitHubu a umožňuje automatizovat vaši CI/CD pipeline pro sestavení, testování a nasazení.

Tato stránka obsahuje informace o Akcích GitHubu vyvinutých službou Databricks a příklady pro běžné případy použití. Informace o dalších funkcích CI/CD a osvědčených postupech pro Databricks najdete v tématu CI/CD v Azure Databricks a osvědčených postupech a doporučených pracovních postupech CI/CD v Databricks.

Databricks GitHub Actions

Databricks vyvinula následující GitHub Actions pro vaše pracovní postupy CI/CD na GitHubu. Přidejte soubory YAML GitHub Actions do adresáře úložiště .github/workflows .

Poznámka:

Tento článek se zabývá akcemi GitHub Actions, které vyvíjí třetí strana. Pokud chcete kontaktovat poskytovatele, podívejte se na podporu GitHub Actions.

Akce GitHubu Popis
databricks/setup-cli Složená akce, která nastaví Databricks CLI v workflowu GitHub Actions.

Spuštění pracovního postupu CI/CD, který aktualizuje složku Git

Následující příklad souboru YAML pro GitHub Actions aktualizuje adresář Git v pracovním prostoru, když se aktualizuje vzdálená větev. Informace o přístupu ke složce Git pro CI/CD najdete v tématu Další nástroje pro správu zdrojového kódu.

Požadavky

Tento příklad používá federaci identit úloh pro GitHub Actions k lepšímu zabezpečení a vyžaduje, abyste do svého účtu přidali instanční objekt se zásadami federace GitHub Actions. Viz Povolení federace identit úloh pro GitHub Actions.

Důležité

Subjekt zásad federace (identita federovaného tokenu) musí přesně odpovídat očekávanému předmětu tokenu. V tomto příkladu je typ a název entity Environment a Prod. Konstruovaný předmět by měl být ve tvaru repo:my-github-org-or-user/my-repo:environment:Prod.

Po vytvoření služby principal se zásadami federace nastavte proměnnou prostředí DATABRICKS_HOST na pracovní prostor hostitele Azure Databricks a proměnnou prostředí DATABRICKS_CLIENT_ID na UUID principálu služby. Proměnná DATABRICKS_AUTH_TYPE prostředí je nastavena v akci. Informace o proměnných prostředí Databricks najdete v tématu Proměnné prostředí a pole pro jednotné ověřování.

Vytvoření akce

Teď do úložiště přidejte soubor .github/workflows/sync_git_folder.yml pomocí následujícího YAML:

name: Sync Git Folder

concurrency: prod_environment

on:
  push:
    branches:
      # Set your base branch name here
      - git-folder-cicd-example

permissions:
  # These permissions are required for workload identity federation.
  id-token: write
  contents: read

jobs:
  deploy:
    runs-on: ubuntu-latest
    name: 'Update git folder'
    environment: Prod
    env:
      DATABRICKS_AUTH_TYPE: github-oidc
      DATABRICKS_HOST: ${{ vars.DATABRICKS_HOST }}
      DATABRICKS_CLIENT_ID: ${{ secrets.DATABRICKS_CLIENT_ID }} # This is the service principal UUID.

    steps:
      - uses: actions/checkout@v3
      - uses: databricks/setup-cli@main
      - name: Update git folder
        # Set your workspace path and branch name here
        run: databricks repos update /Workspace/<git-folder-path> --branch git-folder-cicd-example

Spuštění CI/CD workflowu se sadou, která spouští aktualizaci pipeline

Následující příklad souboru YAML GitHub Actions aktivuje testovací nasazení, které ověří, nasadí a spustí zadanou úlohu v sadě v předprodukčním cíli s názvem dev definovaným v konfiguračním souboru sady.

Požadavky

Tento příklad vyžaduje následující:

  • Uživatelsky definovaná proměnná DATABRICKS_BUNDLE_ENVprostředí .

  • Konfigurační soubor sady v kořenovém adresáři úložiště, který je explicitně deklarován prostřednictvím nastavení working-directory: . souboru YAML GitHub Actions. Tento konfigurační soubor sady prostředků by měl definovat pracovní postup Azure Databricks s názvem sample_job a cílem s názvem dev. Například:

    # This is a Databricks asset bundle definition for pipeline_update.
    bundle:
      name: pipeline_update
    
    include:
      - resources/*.yml
    
    variables:
      catalog:
        description: The catalog to use
      schema:
        description: The schema to use
    
    resources:
      jobs:
        sample_job:
          name: sample_job
    
          parameters:
            - name: catalog
              default: ${var.catalog}
            - name: schema
              default: ${var.schema}
    
          tasks:
            - task_key: refresh_pipeline
              pipeline_task:
                pipeline_id: ${resources.pipelines.sample_pipeline.id}
    
          environments:
            - environment_key: default
              spec:
                environment_version: '4'
    
      pipelines:
        sample_pipeline:
          name: sample_pipeline
          catalog: ${var.catalog}
          schema: ${var.schema}
          serverless: true
          root_path: '../src/sample_pipeline'
    
          libraries:
            - glob:
                include: ../src/sample_pipeline/transformations/**
    
          environment:
            dependencies:
              - --editable ${workspace.file_path}
    
    targets:
      dev:
        mode: development
        default: true
        workspace:
          host: <dev-workspace-url>
        variables:
          catalog: my_catalog
          schema: ${workspace.current_user.short_name}
      prod:
        mode: production
        workspace:
          host: <production-workspace-url>
          root_path: /Workspace/Users/someone@example.com/.bundle/${bundle.name}/${bundle.target}
        variables:
          catalog: my_catalog
          schema: prod
        permissions:
          - user_name: someone@example.com
            level: CAN_MANAGE
    

    Další informace o konfiguraci sady prostředků najdete v tématu Konfigurace sady prostředků Databricks.

  • Tajný klíč SP_TOKENGitHubu, který představuje přístupový token Azure Databricks pro instanční objekt Azure Databricks přidružený k pracovnímu prostoru Azure Databricks, do kterého se tato sada nasazuje a spouští. Vytvoření tokenu:

    1. Vytvořte principál služby Databricks. Viz Přidání instančních objektů do vašeho účtu.
    2. Vygenerujte tajemství pro service principal. Viz krok 1: Vytvoření tajného klíče OAuth. Zkopírujte hodnoty tajných kódů a ID klienta.
    3. Ručně vygenerujte přístupový token Databricks (účet nebo pracovní prostor) pomocí zkopírovaných tajných kódů a hodnot ID klienta. Viz Vygenerování přístupového tokenu na úrovni účtu.
    4. access_token Zkopírujte hodnotu z odpovědi JSON. Přidejte tajný údaj GitHubu s názvem SP_TOKEN do Actions ve vašem úložišti a použijte přístupový token Databricks jako hodnotu tajného údaje. Viz Šifrované tajné kódy.

    Proměnná DATABRICKS_TOKENprostředí sjednoceného ověřování je nastavená v akci na SP_TOKEN nakonfigurovanou hodnotu.

Vytvoření akce

Teď do úložiště přidejte soubor .github/workflows/pipeline_update.yml pomocí následujícího YAML:

# This workflow validates, deploys, and runs the specified bundle
# within a pre-production target named "dev".
name: 'Dev deployment'

# Ensure that only a single job or workflow using the same concurrency group
# runs at a time.
concurrency: 1

# Trigger this workflow whenever a pull request is opened against the repo's
# main branch or an existing pull request's head branch is updated.
on:
  pull_request:
    types:
      - opened
      - synchronize
    branches:
      - main

jobs:
  # Used by the "pipeline_update" job to deploy the bundle.
  # Bundle validation is automatically performed as part of this deployment.
  # If validation fails, this workflow fails.
  deploy:
    name: 'Deploy bundle'
    runs-on: ubuntu-latest

    steps:
      # Check out this repo, so that this workflow can access it.
      - uses: actions/checkout@v3

      # Download the Databricks CLI.
      # See https://github.com/databricks/setup-cli
      - uses: databricks/setup-cli@main

      # Deploy the bundle to the "dev" target as defined
      # in the bundle's settings file.
      - run: databricks bundle deploy
        working-directory: .
        env:
          DATABRICKS_TOKEN: ${{ secrets.SP_TOKEN }}
          DATABRICKS_BUNDLE_ENV: dev

  # Validate, deploy, and then run the bundle.
  pipeline_update:
    name: 'Run pipeline update'
    runs-on: ubuntu-latest

    # Run the "deploy" job first.
    needs:
      - deploy

    steps:
      # Check out this repo, so that this workflow can access it.
      - uses: actions/checkout@v3

      # Use the downloaded Databricks CLI.
      - uses: databricks/setup-cli@main

      # Run the Databricks workflow named "sample_job" as defined in the
      # bundle that was just deployed.
      - run: databricks bundle run sample_job --refresh-all
        working-directory: .
        env:
          DATABRICKS_TOKEN: ${{ secrets.SP_TOKEN }}
          DATABRICKS_BUNDLE_ENV: dev

Můžete také chtít aktivovat produkční nasazení. Následující soubor YAML GitHub Actions může existovat ve stejném úložišti jako předchozí soubor. Tento soubor ověří, nasadí a spustí zadanou sadu v rámci produkčního cíle s názvem "prod", jak je definováno v konfiguračním souboru sady.

# This workflow validates, deploys, and runs the specified bundle
# within a production target named "prod".
name: 'Production deployment'

# Ensure that only a single job or workflow using the same concurrency group
# runs at a time.
concurrency: 1

# Trigger this workflow whenever a pull request is pushed to the repo's
# main branch.
on:
  push:
    branches:
      - main

jobs:
  deploy:
    name: 'Deploy bundle'
    runs-on: ubuntu-latest

    steps:
      # Check out this repo, so that this workflow can access it.
      - uses: actions/checkout@v3

      # Download the Databricks CLI.
      # See https://github.com/databricks/setup-cli
      - uses: databricks/setup-cli@main

      # Deploy the bundle to the "prod" target as defined
      # in the bundle's settings file.
      - run: databricks bundle deploy
        working-directory: .
        env:
          DATABRICKS_TOKEN: ${{ secrets.SP_TOKEN }}
          DATABRICKS_BUNDLE_ENV: prod

  # Validate, deploy, and then run the bundle.
  pipeline_update:
    name: 'Run pipeline update'
    runs-on: ubuntu-latest

    # Run the "deploy" job first.
    needs:
      - deploy

    steps:
      # Check out this repo, so that this workflow can access it.
      - uses: actions/checkout@v3

      # Use the downloaded Databricks CLI.
      - uses: databricks/setup-cli@main

      # Run the Databricks workflow named "sample_job" as defined in the
      # bundle that was just deployed.
      - run: databricks bundle run sample_job --refresh-all
        working-directory: .
        env:
          DATABRICKS_TOKEN: ${{ secrets.SP_TOKEN }}
          DATABRICKS_BUNDLE_ENV: prod

Spuštění pracovního postupu CI/CD, který sestaví soubor JAR a nasadí sadu

Pokud máte ekosystém založený na Javě, musí akce GitHubu před nasazením sady sestavit a nahrát soubor JAR. Následující příklad souboru YAML GitHub Actions aktivuje nasazení, které sestaví a nahraje soubor JAR na svazek, a pak ověří a nasadí sadu do produkčního cíle s názvem "prod", jak je definováno v konfiguračním souboru sady. Kompiluje soubor JAR založený na Javě, ale kroky kompilace projektu založeného na jazyce Scala jsou podobné.

Požadavky

Tento příklad vyžaduje následující:

  • Konfigurační soubor sady v kořenovém adresáři úložiště, který je explicitně deklarován prostřednictvím nastavení souboru YAML GitHub Actions working-directory: .
  • DATABRICKS_TOKEN Proměnná prostředí, která představuje přístupový token Azure Databricks přidružený k pracovnímu prostoru Azure Databricks, do kterého se tato sada nasazuje a spouští.
  • Proměnná DATABRICKS_HOST prostředí, která představuje hostitelský pracovní prostor Azure Databricks.

Vytvoření akce

Teď do úložiště přidejte soubor .github/workflows/build_jar.yml pomocí následujícího YAML:

name: Build JAR and deploy with bundles

on:
  pull_request:
    branches:
      - main
  push:
    branches:
      - main

jobs:
  build-test-upload:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Java
        uses: actions/setup-java@v4
        with:
          java-version: '17' # Specify the Java version used by your project
          distribution: 'temurin' # Use a reliable JDK distribution

      - name: Cache Maven dependencies
        uses: actions/cache@v4
        with:
          path: ~/.m2/repository
          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
          restore-keys: |
            ${{ runner.os }}-maven-

      - name: Build and test JAR with Maven
        run: mvn clean verify # Use verify to ensure tests are run

      - name: Databricks CLI Setup
        uses: databricks/setup-cli@v0.9.0 # Pin to a specific version

      - name: Upload JAR to a volume
        env:
          DATABRICKS_TOKEN: ${{ secrets.DATABRICKS_TOKEN }}
          DATABRICKS_HOST: ${{ secrets.DATABRICKS_HOST }} # Add host for clarity
        run: |
          databricks fs cp target/my-app-1.0.jar dbfs:/Volumes/artifacts/my-app-${{ github.sha }}.jar --overwrite

  validate:
    needs: build-test-upload
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Databricks CLI Setup
        uses: databricks/setup-cli@v0.9.0

      - name: Validate bundle
        env:
          DATABRICKS_TOKEN: ${{ secrets.DATABRICKS_TOKEN }}
          DATABRICKS_HOST: ${{ secrets.DATABRICKS_HOST }}
        run: databricks bundle validate

  deploy:
    needs: validate
    if: github.event_name == 'push' && github.ref == 'refs/heads/main' # Only deploy on push to main
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Databricks CLI Setup
        uses: databricks/setup-cli@v0.9.0

      - name: Deploy bundle
        env:
          DATABRICKS_TOKEN: ${{ secrets.DATABRICKS_TOKEN }}
          DATABRICKS_HOST: ${{ secrets.DATABRICKS_HOST }}
        run: databricks bundle deploy --target prod

Dodatečné zdroje