Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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ázvemsample_joba cílem s názvemdev. 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_MANAGEDalší 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:- Vytvořte principál služby Databricks. Viz Přidání instančních objektů do vašeho účtu.
- 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.
- 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.
-
access_tokenZkopírujte hodnotu z odpovědi JSON. Přidejte tajný údaj GitHubu s názvemSP_TOKENdo 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 naSP_TOKENnakonfigurovanou 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_TOKENPromě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_HOSTprostř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