Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Это важно
Эта функция доступна в общедоступной предварительной версии.
GitHub Actions запускают триггеры потоков CI/CD из ваших репозиториев GitHub и позволяют автоматизировать конвейеры вашей сборки, тестирования и развертывания CI/CD.
Эта страница содержит сведения о действиях GitHub, разработанных Databricks и примерами распространенных вариантов использования. Дополнительные сведения о других функциях CI/CD и рекомендациях по Databricks см. в статье CI/CD в Azure Databricks и рекомендации и рекомендуемые рабочие процессы CI/CD в Databricks.
Databricks GitHub Actions
Databricks разработал следующие действия GitHub для рабочих процессов CI/CD на сайте GitHub. Добавьте файлы YAML GitHub Actions в каталог репозитория .github/workflows .
Замечание
В этой статье рассматриваются действия GitHub, разработанные сторонними разработчиками. Чтобы связаться с поставщиком, перейдите по ссылке Поддержка GitHub Actions.
| Действие GitHub | Описание |
|---|---|
| databricks/setup-cli | Составное действие, которое настраивает интерфейс командной строки Databricks в рабочем процессе GitHub Actions. |
Запуск рабочего процесса CI/CD, который обновляет папку Git
В следующем примере GitHub Actions YAML-файл обновляет папку рабочей области Git при обновлении удаленной ветви. Сведения о подходе к папке Git для CI/CD см. в разделе "Другие средства для управления версиями".
Требования
В этом примере используется федерация учетных данных нагрузки для GitHub Actions для повышения безопасности, и требуется, чтобы вы добавили служебный принципал в свою учетную запись с политикой федерации GitHub Actions. См. статью "Включить федерацию удостоверений рабочей нагрузки" для GitHub Actions.
Это важно
Субъект политики федерации (удостоверение федеративного токена) должен точно соответствовать ожидаемому субъекту маркера. В этом примере тип сущности и имя — Environment и Prod. Созданная тема должна находиться в форме repo:my-github-org-or-user/my-repo:environment:Prod.
После создания учетной записи службы с политикой федерации установите переменную среды DATABRICKS_HOST на рабочую область хоста Azure Databricks и переменную среды DATABRICKS_CLIENT_ID на UUID учетной записи службы. Переменная DATABRICKS_AUTH_TYPE среды устанавливается в действии. Сведения о переменных среды Databricks см. в разделе "Переменные среды" и поля для унифицированной проверки подлинности.
Создание действия
Теперь добавьте файл .github/workflows/sync_git_folder.yml в репозиторий с помощью следующего 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
Запуск рабочего процесса CI/CD с пакетом, выполняющим обновление конвейера
В следующем примере GitHub Actions YAML-файл активирует тестовое развертывание, которое проверяет, развертывает и запускает указанное задание в пакете в предварительно созданном целевом объекте с именем, определенным dev в файле конфигурации пакета.
Требования
В этом примере требуется наличие чего-либо.
Определяемая пользователем переменная
DATABRICKS_BUNDLE_ENVсреды.Файл конфигурации пакета в корне репозитория, который явно объявлен с помощью параметра
working-directory: .GitHub Actions YAML-файла, этот файл конфигурации пакета должен определить рабочий процесс Azure Databricks с именемsample_jobи целевым именемdev. Рассмотрим пример.# 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Дополнительные сведения о конфигурации пакета см. в разделе "Конфигурация пакета ресурсов Databricks".
Секрет GitHub с именем
SP_TOKEN, представляющий маркер доступа Azure Databricks для субъекта-службы Azure Databricks, связанного с рабочей областью Azure Databricks, в которой развертывается и выполняется этот пакет. Чтобы создать токен, выполните приведенные действия.- Создайте сервисный принципал Databricks. См. статью "Добавление субъектов-служб" в учетную запись.
- Создайте секрет для учетной записи службы. См. шаг 1. Создание секрета OAuth. Скопируйте значения секрета и идентификатора клиента.
- Вручную создайте токен доступа для Databricks (учетная запись или рабочая область), используя скопированные значения секрета и идентификатора клиента. См . раздел "Создание маркера доступа на уровне учетной записи".
-
access_tokenСкопируйте значение из ответа JSON. Добавьте секрет GitHub с именемSP_TOKENв Actions вашего репозитория и используйте токен доступа Databricks в качестве значения секрета. См. зашифрованные секреты.
Переменная
DATABRICKS_TOKENсреды унифицированной проверки подлинности устанавливается в действии, настроенномSP_TOKENвами.
Создание действия
Теперь добавьте файл .github/workflows/pipeline_update.yml в репозиторий с помощью следующего 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
Возможно, вы также захотите инициировать рабочие развертывания. Следующий файл 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 "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
Запуск рабочего процесса 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.
Создание действия
Теперь добавьте файл .github/workflows/build_jar.yml в репозиторий с помощью следующего 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