Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
На этой странице объясняется, как автоматизировать развертывание приложения Databricks из GitHub с помощью GitHub Actions и Declarative Automation Bundles. Он охватывает федерацию удостоверений рабочей нагрузки, рабочий процесс YAML и проверку работоспособности, которая подтверждает, что приложение обслуживает последний код после каждого развертывания.
Общие рекомендации GitHub Actions для заданий и конвейеров Azure Databricks см. в разделе GitHub Actions. Сведения о настройке федерации удостоверений для рабочей нагрузки см. в статье Включение федерации удостоверений для рабочей нагрузки в GitHub Actions.
Note
Чтобы повторно развернуть приложение автоматически при каждой отправке в ветвь, используйте автоматические развертывания Git (бета-версия). См. статью "Включить автоматическое развертывание Git".
Requirements
- Субъект-службы в вашей учетной записи Azure Databricks, являющийся владельцем развернутого приложения. См. статью "Добавление сервисных принципалов в вашу учетную запись".
- Конфигурация пакета
databricks.ymlв корне вашего репозитория GitHub, объявляющая приложение как ресурс. См. приложение. - Локально установленный интерфейс командной строки Databricks для задач разовой настройки. См. установите или обновите CLI Databricks.
Шаг 1. Настройка федерации удостоверений рабочей нагрузки
Федерация удостоверений для рабочей нагрузки позволяет исполнителю GitHub Actions проходить аутентификацию в Azure Databricks с помощью краткоживущего токена OIDC вместо хранения учетных данных в репозитории.
- Выполните действия, описанные в разделе Настройка федерации удостоверений рабочей нагрузки для GitHub Actions, чтобы создать политику федерации GitHub Actions в субъекте-службы. Запишите идентификатор приложения субъекта-службы (UUID) и URL-адрес вашей рабочей области. В рабочем процессе требуются обе переменные.
- Предоставьте субъекту-службе
CAN MANAGEразрешение на приложение или разрешение рабочей области для создания приложений, если приложение еще не существует. См. настройку разрешений для приложения Databricks.
шаг 2. Настройка репозитория GitHub
В репозитории GitHub создайте среду развертывания для хранения переменных подключения к рабочей области. Использование среды также позволяет требовать ручного утверждения перед запуском развертываний.
- В Параметры>Среды создайте среду с именем
prod(или любым именем, на которое ссылается ваш рабочий процесс). - Для переменных среды добавьте следующее:
| Variable | Value |
|---|---|
DATABRICKS_HOST |
URL-адрес рабочей области, например https://my-workspace.cloud.databricks.com |
DATABRICKS_CLIENT_ID |
Идентификатор приложения субъекта-службы из шага 1 |
Ни одно из значений не является учетными данными. Политика федерации для субъекта-службы определяет, кто может аутентифицироваться от его имени, поэтому сам по себе идентификатор клиента не дает доступа. Вам не нужен секрет клиента.
Шаг 3. Настройка пакета для рабочих развертываний
В databricks.yml укажите явную рабочую область host и root_path для вашего целевого объекта prod. Это гарантирует, что пакет будет разворачиваться в одном и том же месте при каждом запуске. Для проверки в рабочем режиме требуются оба поля, если только для run_as не задан субъект-служба. См. режимы развертывания декларативных пакетов автоматизации.
Источник Git
Используйте git_source, чтобы при развертывании код загружался напрямую из вашего репозитория Git вместо загрузки файлов в рабочую область. Это позволяет избежать дополнительного sync шага и сохраняет развернутый код в синхронизации с репозиторием.
targets:
prod:
mode: production
workspace:
host: https://my-workspace.cloud.databricks.com
root_path: /Workspace/Users/<service-principal-or-owner>/.bundle/${bundle.name}/${bundle.target}
resources:
apps:
my_app:
name: my-app
git_repository:
url: https://github.com/org/repo
git_source:
branch: main
source_code_path: apps/my-app
Замените <service-principal-or-owner> пользователем рабочей области, который владеет артефактами пакета, как правило, идентификатором приложения субъекта-службы. Замените URL-адрес git_repository URL-адресом вашего репозитория GitHub. Если код приложения находится в корневом каталоге репозитория, опустить source_code_path. См. приложение.
Для приватных репозиториев настройте учетные данные Git для сервисного субъекта приложения перед развертыванием. Инструкции cli см. в статье "Развертывание из репозитория Git".
Источник рабочей области
Используется source_code_path для отправки файлов приложений из локального репозитория в рабочую область во время развертывания.
targets:
prod:
mode: production
workspace:
host: https://my-workspace.cloud.databricks.com
root_path: /Workspace/Users/<service-principal-or-owner>/.bundle/${bundle.name}/${bundle.target}
resources:
apps:
my_app:
name: my-app
source_code_path: ./app
Замените <service-principal-or-owner> пользователем рабочей области, который владеет артефактами пакета, как правило, идентификатором приложения субъекта-службы. Замените ./app на путь к исходному коду вашего приложения относительно databricks.yml. См. приложение.
Шаг 4. Добавьте процесс развертывания
Добавьте .github/workflows/deploy.yml в репозиторий:
name: Deploy to Databricks Apps
on:
workflow_dispatch:
# Uncomment to deploy on every push to main once the workflow is validated.
# push:
# branches: [main]
permissions:
id-token: write # required for OIDC federation
contents: read
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
environment: prod
env:
DATABRICKS_AUTH_TYPE: github-oidc
DATABRICKS_HOST: ${{ vars.DATABRICKS_HOST }}
DATABRICKS_CLIENT_ID: ${{ vars.DATABRICKS_CLIENT_ID }}
steps:
- uses: actions/checkout@v4
- name: Install Databricks CLI
uses: databricks/setup-cli@main
- name: Validate bundle
run: databricks bundle validate --target prod
- name: Deploy bundle
run: databricks bundle deploy --target prod
- name: Start or restart app
run: databricks bundle run my_app --target prod
На последнем шаге замените my_app на ключ ресурса, который ваш databricks.yml использует в разделе resources.apps.
Исполнителю требуется разрешение id-token: write для запроса токена OIDC. Действие databricks/setup-cli автоматически считывает DATABRICKS_AUTH_TYPE=github-oidc и обрабатывает проверку подлинности.
Предупреждение
databricks bundle deploy отправляет исходный код и обновляет ресурсы, но не перезапускает процесс приложения. Если пропустить последний databricks bundle run шаг, развертывание в CI проходит успешно, а приложение продолжает работать на предыдущей версии кода. Всегда запускайте ресурсный пакет после развертывания.
Шаг 5. Дождитесь, пока приложение не станет работоспособным
Databricks рекомендует добавить шаг опроса состояния после развертывания.
databricks bundle run завершает работу сразу после того, как приложение сигнализирует о начале работы, но приложение еще не запущено. Он по-прежнему может завершиться ошибкой во время запуска из-за проблем, таких как отсутствующие зависимости, отсутствующие переменные среды или конфликт портов. Добавление шага опроса гарантирует, что сбой запуска также завершается сбоем рабочего процесса:
- name: Wait for app to be running
env:
APP_NAME: my-app
run: |
for i in $(seq 1 20); do
STATE=$(databricks apps get "$APP_NAME" --output json | jq -r '.app_status.state')
echo "Attempt $i/20: state=$STATE"
if [ "$STATE" = "RUNNING" ]; then
exit 0
fi
sleep 15
done
echo "App did not reach RUNNING state within 5 minutes" >&2
exit 1
Установите для APP_NAME значение, которое ваш databricks.yml объявляет в разделе resources.apps.<key>.name, а не ключ ресурса пакета.
Обработка существующего приложения
Имена приложений уникальны в рабочей области. Шаг bundle deploy завершается с ошибкой An app with the same name already exists, когда другой пакет (или приложение, созданное вручную) уже содержит приложение с таким именем. Свяжите сборку с существующим приложением вместо того, чтобы создавать его заново.
Запустите этот файл один раз локально, чтобы подключить пакет к существующему приложению:
databricks bundle deployment bind my_app <existing-app-name> --target prod --auto-approve
Затем повторно запустите рабочий процесс. Последующие развертывания повторно используют привязку.
Если существующее приложение имеет конфигурацию на стороне сервера (например budget_policy_id), которая не находится в вашем databricks.ymlприложении, скопируйте его в файл пакета перед повторной развертыванием. Несоответствия отображаются как ошибка Terraform "непоследовательный результат" во время шага развертывания пакета.
Выбор триггера
Начните с workflow_dispatch, чтобы первое развертывание было ручным. После успешного выполнения нескольких запусков добавьте push: branches: [main] для развертывания при каждом слиянии.
Для дополнительной меры безопасности настройте среду prod с обязательными проверяющими в разделе Параметры>Среды>prod>Правила защиты развертывания. Каждый запуск рабочего процесса ожидает утверждения перед запуском задания развертывания.
Дополнительные ресурсы
- Настройте федерацию удостоверений для рабочей нагрузки, чтобы настроить политику федерации GitHub Actions для субъекта-службы.
-
Объявите приложение в качестве ресурса пакета, чтобы добавить его в
databricks.yml. - Настройте разрешения приложения для управления или использования развернутого приложения.
- Узнайте о декларативных пакетах автоматизации для получения дополнительных сведений о жизненном цикле пакета и режимах развертывания.
- Использовать GitHub Actions с Azure Databricks для руководства по заданиям и конвейерам за пределами приложений.