Поделиться через


Действия GitHub

Это важно

Эта функция доступна в общедоступной предварительной версии.

GitHub Actions позволяет автоматизировать конвейер сборки, тестирования и развертывания CI/CD. Databricks разработал следующие действия GitHub для рабочих процессов CI/CD на сайте GitHub. Добавьте файлы YAML GitHub Actions в каталог репозитория .github/workflows .

Замечание

В этой статье рассматриваются действия GitHub, разработанные сторонними разработчиками. Чтобы связаться с поставщиком, перейдите по ссылке Поддержка GitHub Actions.

Действие GitHub Описание
databricks/setup-cli Составное действие, которое настраивает интерфейс командной строки Databricks в рабочем процессе GitHub Actions.

Развертывание пакетов с помощью GitHub Actions

GitHub Actions можно использовать для развертывания пакетов ресурсов Databricks и запуска рабочих процессов CI/CD из репозиториев GitHub. Дополнительные сведения о других функциях CI/CD и рекомендациях по Databricks см. в статье CI/CD в Azure Databricks и рекомендации и рекомендуемые рабочие процессы CI/CD в Databricks.

Запуск рабочего процесса CI/CD с пакетом, выполняющим обновление конвейера

В следующем примере GitHub Actions YAML-файл активирует тестовое развертывание, которое проверяет, развертывает и запускает указанное задание в пакете в предварительно созданном целевом объекте с именем dev, как определено в файле конфигурации пакета.

В этом примере требуется наличие чего-либо.

  • Файл конфигурации пакета в корне репозитория, который явно объявлен с помощью параметра working-directory: . GitHub Actions YAML-файла, этот файл конфигурации пакета должен определить рабочий процесс Azure Databricks с именем my-job и целевым именем dev. См. сведения о конфигурации пакета активов Databricks.
  • Секрет GitHub с именем SP_TOKEN, представляющий маркер доступа Azure Databricks для субъекта-службы Azure Databricks, связанного с рабочей областью Azure Databricks, в которой развертывается и выполняется этот пакет. См. зашифрованные секреты.
# 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 "my-job" as defined in the
      # bundle that was just deployed.
      - run: databricks bundle run my-job --refresh-all
        working-directory: .
        env:
          DATABRICKS_TOKEN: ${{ secrets.SP_TOKEN }}
          DATABRICKS_BUNDLE_ENV: dev

Возможно, вы также захотите инициировать рабочие развертывания. Следующий файл GitHub Actions YAML может существовать в том же репозитории, что и предыдущий файл. Этот файл проверяет, развертывает и запускает указанный пакет в рабочем целевом объекте с именем prod, как определено в файле конфигурации пакета.

# 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 "my-job" as defined in the
      # bundle that was just deployed.
      - run: databricks bundle run my-job --refresh-all
        working-directory: .
        env:
          DATABRICKS_TOKEN: ${{ secrets.SP_TOKEN }}
          DATABRICKS_BUNDLE_ENV: prod

Запуск рабочего процесса CI/CD, который создает JAR-файл и развертывает пакет

Если у вас экосистема на основе Java, в GitHub Actions необходимо собрать и загрузить JAR-файл перед развертыванием пакета. В следующем примере YAML-файл GitHub Actions запускает развертывание, которое создает и загружает JAR-файл на том, затем проверяет и развертывает пакет на рабочую среду, называемую "prod", как определено в файле конфигурации пакета. Он компилирует JAR-файл на основе Java, но шаги компиляции для проекта на основе Scala аналогичны.

В этом примере требуется наличие чего-либо.

  • Файл конфигурации пакета в корне репозитория, который явно задаётся параметром в YAML-файле GitHub Actions working-directory: .
  • DATABRICKS_TOKEN Переменная среды, представляющая маркер доступа Azure Databricks, связанный с рабочей областью Azure Databricks, в которой развертывается и выполняется этот пакет.
  • Переменная DATABRICKS_HOST среды, представляющая рабочую область узла Azure Databricks.
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/[email protected] # 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/[email protected]

      - 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/[email protected]

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

Дополнительные ресурсы