Megosztás:


GitHub Actions

Fontos

Ez a funkció nyilvános előzetes verzióban van.

A GitHub Actions aktiválja a CI-/CD-folyamatok futtatását a GitHub-adattárakból, és lehetővé teszi a CI/CD-folyamat összeállításának, tesztelésének és üzembe helyezésének automatizálását.

Ez az oldal információkat nyújt a Databricks által kifejlesztett GitHub Actions-műveletekről, valamint példákat a gyakori használati esetekre. A Databricks egyéb CI/CD-funkcióiról és bevált gyakorlatokról további információt a CI/CD az Azure Databricks platformon és a Databricks ajánlott CI/CD-munkafolyamatai és bevált gyakorlatai címen talál.

Databricks GitHub Actions

A Databricks a következő GitHub Actionst fejlesztette ki a CI-/CD-munkafolyamatokhoz a GitHubon. GitHub Actions YAML-fájlokat vehet fel az adattár könyvtárába .github/workflows .

Megjegyzés:

Ez a cikk egy harmadik fél által fejlesztett GitHub Actionst ismerteti. Ha kapcsolatba szeretne lépni a szolgáltatóval, tekintse meg GitHub Actions támogatási.

GitHub-művelet Leírás
databricks/setup-cli Összetett művelet, amely beállítja a Databricks parancssori felületét egy GitHub Actions-munkafolyamatban.

Ci/CD-munkafolyamat futtatása Git-mappa frissítésére

Az alábbi példában a GitHub Actions YAML-fájlja frissít egy munkaterületi Git-mappát, amikor egy távoli ág frissül. A CI/CD Git-mappa megközelítéséről további információt az Egyéb forrásvezérlő eszközök című témakörben talál.

Requirements

Ez a példa számítási feladat identitás-összevonást használ a GitHub Actions esetében a fokozott biztonság érdekében, és megköveteli, hogy legyen egy GitHub Actions összevonási szabályzattal rendelkező szolgáltatási főszereplő hozzáadva a fiókjához. Lásd: Számítási feladatok identitás-összevonásának engedélyezése a GitHub Actionshez.

Fontos

Az összevonási szabályzat tárgyának (az összevont jogkivonat identitásának) pontosan meg kell egyeznie a várt jogkivonat-tulajdonossal. Ebben a példában az entitás típusa és neve Környezet és Prod. A létrehozott tárgynak formában repo:my-github-org-or-user/my-repo:environment:Prodkell lennie.

Miután szövetségi szabályzattal létrehozott egy szolgáltatási megbízottat, állítsa be a DATABRICKS_HOST környezeti változót az Azure Databricks-gazdagép munkaterületére, majd a DATABRICKS_CLIENT_ID környezeti változót a szolgáltatási megbízott UUID azonosítójához. A DATABRICKS_AUTH_TYPE környezeti változó a műveletben van beállítva. A Databricks környezeti változóiról további információt az egyesített hitelesítés környezeti változói és mezői című témakörben talál.

A művelet létrehozása

Most vegyen fel egy fájlt .github/workflows/sync_git_folder.yml az adattárba a következő YAML-lel:

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

CI/CD-munkafolyamat futtatása folyamatfrissítést futtató csomaggal

Az alábbi példában a GitHub Actions YAML-fájl egy teszttelepítést indít el, amely ellenőrzi, telepíti és futtatja a megadott feladatot a csomagban egy, a csomagkonfigurációs fájlban definiált dev , éles üzem előtti célon belül.

Requirements

Ehhez a példához a következőre van szükség:

  • Felhasználó által definiált környezeti változó DATABRICKS_BUNDLE_ENV.

  • Az adattár gyökerében található csomagkonfigurációs fájl, amely kifejezetten deklarálva van a GitHub Actions YAML-fájl beállításával working-directory: . . A csomagkonfigurációs fájlnak meg kell határoznia egy Azure Databricks-munkafolyamatot és egy elnevezett sample_job célhelyet dev. Például:

    # 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
    

    További információ a csomagkonfigurációról: Databricks Asset Bundle configuration.

  • Egy GitHub-titkos kód, SP_TOKENamely az Azure Databricks hozzáférési jogkivonatát jelöli egy Azure Databricks-szolgáltatásnévhez , amely ahhoz az Azure Databricks-munkaterülethez van társítva, amelyhez a csomagot üzembe helyezik és futtatják. Token létrehozása:

    1. Hozzon létre egy Databricks szolgáltatásfőt. Lásd: Szolgáltatásnevek hozzáadása a fiókhoz.
    2. Hozzon létre egy titkos kulcsot a szolgáltatási azonosító számára. Lásd : 1. lépés: OAuth-titkos kód létrehozása. Másolja ki a titkos kód és az ügyfélazonosító értékeit.
    3. Hozzon létre manuálisan egy Databricks hozzáférési jogkivonatot (fiókot vagy munkaterületet) a másolt titkos kód és az ügyfélazonosító értékeinek használatával. Lásd: Fiókszintű hozzáférési jogkivonat létrehozása.
    4. Másolja ki az access_token értéket a JSON-válaszból. Adjon hozzá egy SP_TOKEN nevű GitHub-titkos elemet a adattár Actions részéhez, és használja a Databricks hozzáférési tokent titkos értékként. Lásd Titkosított titkok.

    Az DATABRICKS_TOKENegyesített hitelesítési környezeti változó a műveletben arra a SP_TOKEN értékre van beállítva, amelyet Ön konfigurált.

A művelet létrehozása

Most vegyen fel egy fájlt .github/workflows/pipeline_update.yml az adattárba a következő YAML-lel:

# 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

Előfordulhat, hogy éles rendszer telepítéseket is kezdeményezni szeretne. A következő GitHub Actions YAML-fájl ugyanabban az adattárban létezhet, mint az előző fájl. Ez a fájl ellenőrzi, telepíti és futtatja a megadott csomagot egy "prod" nevű éles célon belül a csomagkonfigurációs fájlban definiált módon.

# 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

Futtasson egy CI/CD munkafolyamatot, amely JAR-t épít és üzembe helyez egy csomagot

Ha Java-alapú ökoszisztémával rendelkezik, a GitHub-műveletnek JAR-t kell létrehoznia és feltöltenie a csomag üzembe helyezése előtt. Az alábbi példában a GitHub Actions YAML-fájl elindít egy üzembe helyezést, amely létrehoz és feltölt egy JAR-t egy kötetre, majd ellenőrzi és telepíti a csomagot egy "prod" nevű éles célhoz a csomagkonfigurációs fájlban definiált módon. Java-alapú JAR-t fordít le, de a Scala-alapú projektek fordítási lépései hasonlóak.

Requirements

Ehhez a példához a következőre van szükség:

  • Csomagkonfigurációs fájl az adattár gyökerénél, amely a GitHub Actions YAML-fájl beállításával explicit módon deklarálva van working-directory: .
  • Egy DATABRICKS_TOKEN környezeti változó, amely az Azure Databricks hozzáférési jogkivonatát jelöli, amely ahhoz az Azure Databricks-munkaterülethez van társítva, amelyhez a csomag üzembe helyezése és futtatása folyamatban van.
  • Az DATABRICKS_HOST Azure Databricks gazdagépként szolgáló munkaterületet képviselő környezeti változó.

A művelet létrehozása

Most vegyen fel egy fájlt .github/workflows/build_jar.yml az adattárba a következő YAML-lel:

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

További erőforrások