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


Непрерывная интеграция и развертывание в Azure Databricks с помощью Azure DevOps

Замечание

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

В этой статье описано, как настроить автоматизацию Azure DevOps для кода и артефактов, которые работают с Azure Databricks. В частности, вы настроите рабочий процесс непрерывной интеграции и доставки (CI/CD) для подключения к репозиторию Git, запускайте задания с помощью Azure Pipelines для сборки и модульного тестирования колесика Python (*.whl) и развернете его для использования в записных книжках Databricks.

Рабочий процесс разработки CI/CD

Databricks предлагает следующий рабочий процесс для разработки CI/CD с помощью Azure DevOps:

  1. Создайте репозиторий или используйте существующий репозиторий с сторонним поставщиком Git.
  2. Подключите локальный компьютер разработки к одному и тому же стороннему репозиторию. Инструкции см. в документации сторонних поставщиков Git.
  3. Загрузите все существующие обновленные артефакты (например, записные книжки, файлы кода и скрипты сборки) на ваш локальный компьютер из стороннего репозитория.
  4. При необходимости создайте, обновите и протестируйте артефакты на локальном компьютере разработки. Затем отправьте все новые и измененные артефакты с локального компьютера разработки в сторонний репозиторий. Инструкции см. в документации сторонних поставщиков Git.
  5. Повторите шаги 3 и 4 по мере необходимости.
  6. Используйте Azure DevOps периодически в качестве интегрированного подхода к автоматическому извлечению артефактов из стороннего репозитория, сборки, тестирования и выполнения кода в рабочей области Azure Databricks, а также создания отчетов о результатах тестирования и выполнения. Хотя вы можете запускать Azure DevOps вручную в реальных реализациях, вы будете поручать стороннему поставщику Git запускать Azure DevOps каждый раз, когда происходит определенное событие, например запрос на вытягивание репозитория.

Существует множество инструментов CI/CD, которые можно использовать для управления и выполнения конвейера. В этой статье показано, как использовать Azure DevOps. CI/CD — это шаблон проектирования, поэтому шаги и этапы, описанные в примере этой статьи, должны передаваться с несколькими изменениями языка определения конвейера в каждом средстве. Кроме того, большая часть кода в этом примере конвейера является стандартным кодом Python, который можно вызвать в других средствах.

Подсказка

Сведения об использовании Jenkins с Azure Databricks вместо Azure DevOps см. в статье CI/CD с Jenkins в Azure Databricks.

В остальной части этой статьи описывается пара примеров конвейеров в Azure DevOps, которые можно адаптировать к собственным потребностям Azure Databricks.

О примерe

В этом примере используется два конвейера для сбора, развертывания и запуска примера кода Python и записных книжек Python, хранящихся в удаленном репозитории Git.

Первый конвейер, известный как конвейер сборки, подготавливает артефакты сборки для второго конвейера, известного как конвейер релиза. Разделение конвейера сборки из конвейера выпуска позволяет создавать артефакт сборки без развертывания или одновременного развертывания артефактов из нескольких сборок. Чтобы создать конвейеры сборки и выпуска, выполните следующие действия.

  1. Создайте виртуальную машину Azure для конвейера сборки.
  2. Скопируйте файлы из репозитория Git на виртуальную машину.
  3. Создайте tar-файл, сжатый с помощью gzip, который содержит код Python, ноутбуки Python, а также связанные файлы конфигураций для сборки, развертывания и запуска.
  4. Скопируйте файл tar.gz, преобразованный в ZIP-файл, в место, доступное для конвейера выпуска.
  5. Создайте другую виртуальную машину Azure для конвейера выпуска.
  6. Получите ZIP-файл из расположения конвейера сборки, а затем распакуйте ZIP-файл, чтобы получить код Python, записные книжки Python и файлы с параметрами, связанными со сборкой, развертыванием и выполнением.
  7. Разверните код Python, записные книжки Python, а также связанные файлы сборки, параметры развертывания и запуска в удаленной рабочей области Azure Databricks.
  8. Создайте файлы кода компонентов библиотеки колес Python в файл колесика Python.
  9. Запустите модульные тесты в коде компонента, чтобы проверить логику в файле колесика Python.
  10. Запустите блокноты Python, один из которых использует функциональность wheel-пакета Python.

Сведения о интерфейсе командной строки Databricks

В этом примере показано, как использовать интерфейс командной строки Databricks в неинтерактивном режиме в конвейере. Пример конвейера в этой статье развертывает код, создает библиотеку и запускает записные книжки в рабочей области Azure Databricks.

Если вы используете интерфейс командной строки Databricks в конвейере без реализации примера кода, библиотеки и записных книжек из этой статьи, выполните следующие действия.

  1. Подготовьте рабочую область Azure Databricks для использования аутентификации от машины к машине (M2M) через OAuth для аутентификации сервисного принципала. Прежде чем начать, убедитесь, что у вас есть принципал службы Microsoft Entra ID с секретом Azure Databricks OAuth. См Авторизация доступа сервисного принципала к Azure Databricks с помощью OAuth.

  2. Установите интерфейс командной строки Databricks в конвейере. Для этого добавьте задачу скрипта Bash в конвейер, который запускает следующий скрипт:

    curl -fsSL https://raw.githubusercontent.com/databricks/setup-cli/main/install.sh | sh
    

    Чтобы добавить задачу скрипта Bash в конвейер, см. шаг 3.6. Установите интерфейс командной строки Databricks и средства сборки колес Python.

  3. Настройте конвейер, чтобы настроить установленную командную строку Databricks для аутентификации сервисного принципала в рабочей области. Для этого см. Шаг 3.1: Определение переменных окружения для конвейера выпуска.

  4. Добавьте дополнительные задачи Bash-скрипта в свой конвейер по мере необходимости для выполнения команд Databricks CLI. Смотрите команды Databricks CLI.

Перед тем как начать

Чтобы использовать пример этой статьи, необходимо:

  • Существующий проект Azure DevOps . Если у вас еще нет проекта, создайте проект в Azure DevOps.
  • Существующий репозиторий с поставщиком Git, поддерживаемым Azure DevOps. Вы добавите пример кода Python, пример записной книжки Python и связанные файлы параметров выпуска в этот репозиторий. Если у вас еще нет репозитория, создайте его, следуя инструкциям поставщика Git. Затем подключите проект Azure DevOps к этому репозиторию, если это еще не сделано. Инструкции см. по ссылкам в поддерживаемых исходных репозиториях.
  • В этом статье пример используется межмашинная аутентификация OAuth (M2M) для аутентификации учетной записи службы Microsoft Entra ID в рабочей области Azure Databricks. У вас должна быть учетная запись службы Microsoft Entra ID с OAuth-секретом Azure Databricks для этой учетной записи службы. См Авторизация доступа сервисного принципала к Azure Databricks с помощью OAuth.

Шаг 1. Добавление файлов примера в репозиторий

На этом шаге в репозитории со сторонним поставщиком Git вы добавите все примеры файлов этой статьи, которые конвейеры Azure DevOps создают, развертывают и запускают в удаленном рабочем пространстве Azure Databricks.

Шаг 1.1. Добавление файлов компонентов колес Python

В примере этой статьи конвейеры Azure DevOps для сборки и модульного тестирования wheel-файла Python. Затем записная книжка Azure Databricks вызывает встроенные функции колесика Python.

Для определения логики и модульных тестов для Python wheel файла, с которым работают записные книжки, в корневом каталоге вашего репозитория создайте два файла с именами addcol.py и test_addcol.py, и добавьте их в структуру папок под названием python/dabdemo/dabdemo в папке Libraries, как показано ниже:

└── Libraries
      └── python
            └── dabdemo
                  └── dabdemo
                        ├── addcol.py
                        └── test_addcol.py

Файл addcol.py содержит функцию библиотеки, которая встроена позже в файл колесика Python, а затем установлена в кластерах Azure Databricks. Это простая функция, которая добавляет новый столбец, заполненный литералом, в DataFrame Apache Spark.

# Filename: addcol.py
import pyspark.sql.functions as F

def with_status(df):
  return df.withColumn("status", F.lit("checked"))

Файл test_addcol.py содержит тесты для передачи объекта mock DataFrame в функцию, определенную with_status в addcol.py. Затем результат сравнивается с объектом DataFrame, содержащим ожидаемые значения. Если значения совпадают, тест проходит:

# Filename: test_addcol.py
import pytest
from pyspark.sql import SparkSession
from dabdemo.addcol import *

class TestAppendCol(object):

  def test_with_status(self):
    spark = SparkSession.builder.getOrCreate()

    source_data = [
      ("paula", "white", "paula.white@example.com"),
      ("john", "baer", "john.baer@example.com")
    ]

    source_df = spark.createDataFrame(
      source_data,
      ["first_name", "last_name", "email"]
    )

    actual_df = with_status(source_df)

    expected_data = [
      ("paula", "white", "paula.white@example.com", "checked"),
      ("john", "baer", "john.baer@example.com", "checked")
    ]
    expected_df = spark.createDataFrame(
      expected_data,
      ["first_name", "last_name", "email", "status"]
    )

    assert(expected_df.collect() == actual_df.collect())

Чтобы Databricks CLI корректно упаковал этот код библиотеки в файл пакета Python (wheel), создайте два файла с именами __init__.py и __main__.py в той же папке, что и предыдущие два файла. Кроме того, создайте файл с именем setup.py в папке python/dabdemo , визуализируемый следующим образом:

└── Libraries
      └── python
            └── dabdemo
                  ├── dabdemo
                  │     ├── __init__.py
                  │     ├── __main__.py
                  │     ├── addcol.py
                  │     └── test_addcol.py
                  └── setup.py

Файл __init__.py содержит номер версии библиотеки и его автор. Замените <my-author-name> своим именем:

# Filename: __init__.py
__version__ = '0.0.1'
__author__ = '<my-author-name>'

import sys, os

sys.path.append(os.path.join(os.path.dirname(__file__), "..", ".."))

Файл __main__.py содержит точку входа библиотеки:

# Filename: __main__.py
import sys, os

sys.path.append(os.path.join(os.path.dirname(__file__), "..", ".."))

from addcol import *

def main():
  pass

if __name__ == "__main__":
  main()

Файл setup.py содержит дополнительные параметры для упаковки библиотеки в wheel-файл Python. Замените <my-url>, <my-author-name>@<my-organization>и <my-package-description> допустимыми значениями:

# Filename: setup.py
from setuptools import setup, find_packages

import dabdemo

setup(
  name = "dabdemo",
  version = dabdemo.__version__,
  author = dabdemo.__author__,
  url = "https://<my-url>",
  author_email = "<my-author-name>@<my-organization>",
  description = "<my-package-description>",
  packages = find_packages(include = ["dabdemo"]),
  entry_points={"group_1": "run=dabdemo.__main__:main"},
  install_requires = ["setuptools"]
)

Шаг 1.2. Добавление записной книжки модульного тестирования для файла колеса Python

Позже интерфейс командной строки Databricks запускает задание в записной книжке. Это задание запускает записную книжку Python с именем run_unit_tests.py. Этот ноутбук выполняет pytest в соответствии с логикой библиотеки Python wheel.

Чтобы выполнить модульные тесты для примера этой статьи, добавьте в корневой каталог репозитория файл записной книжки с именем run_unit_tests.py следующего содержимого:

# Databricks notebook source

# COMMAND ----------

# MAGIC %sh
# MAGIC
# MAGIC mkdir -p "/Workspace${WORKSPACEBUNDLEPATH}/Validation/reports/junit/test-reports"

# COMMAND ----------

# Prepare to run pytest.
import sys, pytest, os

# Skip writing pyc files on a readonly filesystem.
sys.dont_write_bytecode = True

# Run pytest.
retcode = pytest.main(["--junit-xml", f"/Workspace{os.getenv('WORKSPACEBUNDLEPATH')}/Validation/reports/junit/test-reports/TEST-libout.xml",
                      f"/Workspace{os.getenv('WORKSPACEBUNDLEPATH')}/files/Libraries/python/dabdemo/dabdemo/"])

# Fail the cell execution if there are any test failures.
assert retcode == 0, "The pytest invocation failed. See the log for details."

Шаг 1.3. Добавление записной книжки, которая вызывает файл колесика Python

Позже интерфейс командной строки Databricks запускает другое задание записной книжки. Эта записная книжка создает объект DataFrame, передает его в функцию библиотеки wheel в Python, выводит результат и сообщает о результатах выполнения задания. Создайте в корне вашего репозитория файл записной книжки, названный dabdemo_notebook.py и содержащий следующее содержимое:

# Databricks notebook source

# COMMAND ----------

# Restart Python after installing the Python wheel.
dbutils.library.restartPython()

# COMMAND ----------

from dabdemo.addcol import with_status

df = (spark.createDataFrame(
  schema = ["first_name", "last_name", "email"],
  data = [
    ("paula", "white", "paula.white@example.com"),
    ("john", "baer", "john.baer@example.com")
  ]
))

new_df = with_status(df)

display(new_df)

# Expected output:
#
# +------------+-----------+-------------------------+---------+
# │ first_name │ last_name │ email                   │ status  │
# +============+===========+=========================+=========+
# │ paula      │ white     │ paula.white@example.com │ checked │
# +------------+-----------+-------------------------+---------+
# │ john       │ baer      │ john.baer@example.com   │ checked │
# +------------+-----------+-------------------------+---------+

Шаг 1.4. Создание конфигурации пакета

В примере этой статьи используются пакеты ресурсов Databricks для определения параметров и поведения для создания, развертывания и запуска файла колеса Python, двух записных книжек и файла кода Python. Наборы ресурсов Databricks, известные как пакеты, позволяют выразить полные данные, аналитику и проекты машинного обучения в виде коллекции исходных файлов. См. раздел "Что такое пакеты ресурсов Databricks?".

Чтобы настроить пакет для примера этой статьи, создайте в корне репозитория файл с именем databricks.yml. В этом примере databricks.yml файла замените следующие заполнители:

  • Замените <bundle-name> уникальным программным именем пакета. Например: azure-devops-demo.
  • Замените <job-prefix-name> на некоторую строку, чтобы однозначно определить задания, созданные в рабочей области Azure Databricks в этом примере. Например: azure-devops-demo.
  • Замените <spark-version-id> идентификатором версии databricks Runtime для кластеров заданий, например 13.3.x-scala2.12.
  • Замените <cluster-node-type-id> идентификатором типа узла кластера для кластеров заданий, например Standard_DS3_v2.
  • Обратите внимание, что dev в targets сопоставлении указываются узел и связанное поведение развертывания. В реальных реализациях вы можете дать этому целевому объекту другое имя в собственных пакетах.

Ниже приведено содержимое файла этого примера databricks.yml :

# Filename: databricks.yml
bundle:
  name: <bundle-name>

variables:
  job_prefix:
    description: A unifying prefix for this bundle's job and task names.
    default: <job-prefix-name>
  spark_version:
    description: The cluster's Spark version ID.
    default: <spark-version-id>
  node_type_id:
    description: The cluster's node type ID.
    default: <cluster-node-type-id>

artifacts:
  dabdemo-wheel:
    type: whl
    path: ./Libraries/python/dabdemo

resources:
  jobs:
    run-unit-tests:
      name: ${var.job_prefix}-run-unit-tests
      tasks:
        - task_key: ${var.job_prefix}-run-unit-tests-task
          new_cluster:
            spark_version: ${var.spark_version}
            node_type_id: ${var.node_type_id}
            num_workers: 1
            spark_env_vars:
              WORKSPACEBUNDLEPATH: ${workspace.root_path}
          notebook_task:
            notebook_path: ./run_unit_tests.py
            source: WORKSPACE
          libraries:
            - pypi:
                package: pytest
    run-dabdemo-notebook:
      name: ${var.job_prefix}-run-dabdemo-notebook
      tasks:
        - task_key: ${var.job_prefix}-run-dabdemo-notebook-task
          new_cluster:
            spark_version: ${var.spark_version}
            node_type_id: ${var.node_type_id}
            num_workers: 1
            spark_env_vars:
              WORKSPACEBUNDLEPATH: ${workspace.root_path}
          notebook_task:
            notebook_path: ./dabdemo_notebook.py
            source: WORKSPACE
          libraries:
            - whl: '/Workspace${workspace.root_path}/files/Libraries/python/dabdemo/dist/dabdemo-0.0.1-py3-none-any.whl'

targets:
  dev:
    mode: development

Дополнительные сведения о синтаксисе databricks.yml файла см. в разделе "Конфигурация пакета ресурсов Databricks".

Шаг 2. Определение конвейера сборки

Azure DevOps предоставляет пользовательский интерфейс, размещенный в облаке, для определения этапов конвейера CI/CD с помощью YAML. Дополнительные сведения о Azure DevOps и конвейерах см. в документации по Azure DevOps.

На этом этапе вы используете разметку YAML для определения конвейера сборки, который создает артефакт развертывания. Чтобы развернуть код в рабочей области Azure Databricks, необходимо указать артефакт сборки этого конвейера в качестве входных данных в конвейер выпуска. Вы определите этот конвейер выпуска позже.

Для запуска конвейеров сборки Azure DevOps предоставляет облачные агенты выполнения по запросу, поддерживающие развертывания в Kubernetes, виртуальных машинах, Функции Azure, Azure Web Apps и множеству других целевых платформ. В этом примере для автоматизации создания артефакта развертывания используется агент, работающий по требованию.

Определите пример сборочного конвейера в этой статье следующим образом:

  1. Войдите в Azure DevOps и щелкните ссылку входа , чтобы открыть проект Azure DevOps.

    Замечание

    Если портал Azure отображается вместо проекта Azure DevOps, щелкните "Другие службы > Azure DevOps" организации > My Azure DevOps, а затем откройте проект Azure DevOps.

  2. Щелкните Конвейеры на боковой панели, а затем выберите Конвейеры в меню Конвейеры.

    Меню конвейера Azure DevOps

  3. Нажмите кнопку "Создать конвейер" и следуйте инструкциям на экране. (Если у вас уже есть конвейеры, щелкните Создайте конвейер вместо этого.) В конце этих инструкций откроется редактор конвейера. Здесь вы определяете скрипт конвейера сборки в azure-pipelines.yml появившемся файле. Если редактор конвейера не отображается в конце инструкций, выберите имя конвейера сборки и нажмите кнопку "Изменить".

    Вы можете использовать селектор ветки Git для настройки процесса сборки для каждой ветки в вашем репозитории Git. Рекомендуется не выполнять работы в производственной среде непосредственно в ветви репозитория main. В этом примере предполагается, что в репозитории существует ветвь release , которая будет использоваться вместо main.

    Редактор конвейера Azure DevOps

    azure-pipelines.yml Скрипт сборочного конвейера по умолчанию хранится в корневом каталоге удаленного репозитория Git, связанного с конвейером.

  4. Перезапишите начальное содержимое файла вашего конвейера azure-pipelines.yml следующим определением, затем нажмите «Сохранить».

    # Specify the trigger event to start the build pipeline.
    # In this case, new code merged into the release branch initiates a new build.
    trigger:
      - release
    
    # Specify the operating system for the agent that runs on the Azure virtual
    # machine for the build pipeline (known as the build agent). The virtual
    # machine image in this example uses the Ubuntu 22.04 virtual machine
    # image in the Azure Pipeline agent pool. See
    # https://learn.microsoft.com/azure/devops/pipelines/agents/hosted#software
    pool:
      vmImage: ubuntu-22.04
    
    # Download the files from the designated branch in the remote Git repository
    # onto the build agent.
    steps:
      - checkout: self
        persistCredentials: true
        clean: true
    
      # Generate the deployment artifact. To do this, the build agent gathers
      # all the new or updated code to be given to the release pipeline,
      # including the sample Python code, the Python notebooks,
      # the Python wheel library component files, and the related Databricks asset
      # bundle settings.
      # Use git diff to flag files that were added in the most recent Git merge.
      # Then add the files to be used by the release pipeline.
      # The implementation in your pipeline will likely be different.
      # The objective here is to add all files intended for the current release.
      - script: |
          git diff --name-only --diff-filter=AMR HEAD^1 HEAD | xargs -I '{}' cp --parents -r '{}' $(Build.BinariesDirectory)
          mkdir -p $(Build.BinariesDirectory)/Libraries/python/dabdemo/dabdemo
          cp $(Build.Repository.LocalPath)/Libraries/python/dabdemo/dabdemo/*.* $(Build.BinariesDirectory)/Libraries/python/dabdemo/dabdemo
          cp $(Build.Repository.LocalPath)/Libraries/python/dabdemo/setup.py $(Build.BinariesDirectory)/Libraries/python/dabdemo
          cp $(Build.Repository.LocalPath)/*.* $(Build.BinariesDirectory)
        displayName: 'Get Changes'
    
      # Create the deployment artifact and then publish it to the
      # artifact repository.
      - task: ArchiveFiles@2
        inputs:
          rootFolderOrFile: '$(Build.BinariesDirectory)'
          includeRootFolder: false
          archiveType: 'zip'
          archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
          replaceExistingArchive: true
    
      - task: PublishBuildArtifacts@1
        inputs:
          ArtifactName: 'DatabricksBuild'
    

Шаг 3. Определение конвейера выпуска

Конвейер развертывания размещает артефакты сборки из конвейера сборки в рабочую среду Azure Databricks. Разделение конвейера выпуска на этом шаге от конвейера сборки на предыдущих шагах позволяет создавать сборку, не развертывая ее или развертывая артефакты из нескольких сборок одновременно.

  1. В проекте Azure DevOps в меню "Конвейеры " на боковой панели щелкните " Выпуски".

    Выпуски Azure DevOps

  2. Нажмите «Создать > новый конвейер релиза». (Если у вас уже есть конвейеры, щелкните Новый конвейер.)

  3. На стороне экрана отображается список шаблонов, используемых для распространенных шаблонов развертывания. Для этой примерной публикации щелкните Пустая задача.

    Конвейер выпуска Azure DevOps 1

  4. В поле "Артефакты" на боковой части экрана нажмите кнопку Добавить. В области Добавление артефакта для Источник (конвейер сборки)выберите созданный ранее конвейер сборки. Нажмите кнопку Добавить.

    Конвейер выпуска Azure DevOps 2

  5. Вы можете настроить активацию конвейера, щелкнув Значок молнии , чтобы отобразить параметры активации на стороне экрана. Если вы хотите автоматически запускать выпуск на основе доступности результатов сборки или после процесса pull request, включите соответствующий триггер. В этом примере на последнем шаге этой статьи вы вручную активируете конвейер сборки, а затем конвейер выпуска.

    Этап 1 конвейера выпуска Azure DevOps

  6. Нажмите кнопку "Сохранить > ОК".

Шаг 3.1. Определение переменных среды для конвейера выпуска

Конвейер релиза этого примера зависит от следующих переменных среды, которые можно добавить, щелкнув Добавить в разделе Переменные конвейера на вкладке Переменные с областью Этап 1:

  • BUNDLE_TARGET, который должен соответствовать target имени в databricks.yml файле. В примере этой статьи это dev.
  • DATABRICKS_HOST— это URL-адрес рабочей области Azure Databricks, начинающийся с https://, например https://adb-<workspace-id>.<random-number>.azuredatabricks.net. Не добавляйте закрывающий тэг после /.
  • DATABRICKS_CLIENT_ID— это идентификатор приложения для субъекта-службы Microsoft Entra ID.
  • DATABRICKS_CLIENT_SECRET, представляющий секрет OAuth Azure Databricks для субъекта-службы идентификатора Microsoft Entra.

Шаг 3.2. Настройка агента выпуска для конвейера выпуска

  1. Щелкните ссылку 1 задание, 0 задача в объекте Stage 1.

    Этап добавления в рамках конвейера выпуска Azure DevOps

  2. На вкладке "Задачи" щелкните задание агента.

  3. В разделе Выбор агента, в Пул агентов, выберите Azure Pipelines.

  4. Для спецификации агентавыберите тот же агент, что и для агента сборки ранее, в этом примере ubuntu-22.04.

    Определение задания агента конвейера выпуска Azure DevOps

  5. Нажмите кнопку "Сохранить > ОК".

Шаг 3.3. Установка версии Python для агента выпуска

  1. Щелкните значок "плюс" в разделе задания агента, указанный красной стрелкой на следующем рисунке. Появится список доступных задач, доступных для поиска. Существует также вкладка Marketplace для сторонних подключаемых модулей, которые можно использовать для дополнения стандартных задач Azure DevOps. Вы добавите несколько задач в релизный агент на следующих этапах.

    Добавление задачи в Azure DevOps

  2. Первая задача, добавляемая, — использовать версию Python, расположенную на вкладке "Инструмент ". Если вы не можете найти эту задачу, используйте поле поиска для поиска. Найдите его, выберите его и нажмите кнопку Добавить рядом с задачей Использовать версию Python.

    Azure DevOps установить версию Python 1

  3. Как и в случае с конвейером сборки, необходимо убедиться, что версия Python совместима со скриптами, которые вызываются в последующих задачах. В этом случае щелкните задачу Использовать Python 3.x рядом с заданием агента, а затем установите для спецификации версии значение . Также установите отображаемое имя . В этом конвейере предполагается, что вы используете Databricks Runtime 13.3 LTS в кластерах, на которых установлен Python 3.10.12.

    Azure DevOps установить версию Python 2

  4. Нажмите кнопку "Сохранить > ОК".

Шаг 3.4. Распаковка артефакта сборки из конвейера сборки

  1. Затем агент выпуска извлекает файл колесика Python, связанные файлы параметров выпуска, записные книжки и файл кода Python из ZIP-файла с помощью задачи Извлечения файлов: щелкните значок плюса в разделе задания агента , выберите задачу извлечь файлы на вкладке служебной программы, и нажмите кнопку Добавить.

  2. Щелкните задачу Извлечь файлы рядом с заданием агента, установите шаблоны архивных файлов на **/*.zipи установите папку назначения на системную переменную $(Release.PrimaryArtifactSourceAlias)/Databricks. Также установите отображаемое имя .

    Замечание

    $(Release.PrimaryArtifactSourceAlias) представляет собой псевдоним, созданный Azure DevOps, для идентификации основного местоположения источника артефакта на агенте выпуска, например _<your-github-alias>.<your-github-repo-name>. Конвейер выпуска задает это значение в качестве переменной RELEASE_PRIMARYARTIFACTSOURCEALIAS среды во время фазы инициализации задания для агента выпуска. См. классические переменные выпуска и артефактов.

  3. Задайте отображаемое имя значением Extract build pipeline artifact.

    Unpackage для Azure DevOps

  4. Нажмите кнопку "Сохранить > ОК".

Шаг 3.5. Установка переменной среды BUNDLE_ROOT

Для того чтобы пример в этой статье работал должным образом, необходимо задать переменную среды, именуемую BUNDLE_ROOT в конвейере выпуска. Наборы ресурсов Databricks используют эту переменную среды для определения расположения databricks.yml файла. Чтобы задать эту переменную среды, выполните указанные ниже действия.

  1. Используйте задачу Переменные среды: нажмите на значок плюса в разделе Задание агента, выберите задачу Переменные среды на вкладке Служебные программы, а затем нажмите Добавить.

    Замечание

    Если задача переменных среды не отображается на вкладке служебная программа, введите Environment Variables в поле поиска и следуйте инструкциям на экране, чтобы добавить задачу на вкладку служебной программы. Это может потребовать выйти из Azure DevOps, а затем вернуться в это место, где вы остановились.

  2. Для переменных среды (разделенные запятыми)введите следующее определение: BUNDLE_ROOT=$(Agent.ReleaseDirectory)/$(Release.PrimaryArtifactSourceAlias)/Databricks

    Замечание

    $(Agent.ReleaseDirectory) представляет псевдоним, созданный Azure DevOps для определения расположения каталога релиза на агенте выпуска, например /home/vsts/work/r1/a. Конвейер выпуска задает это значение в качестве переменной AGENT_RELEASEDIRECTORY среды во время фазы инициализации задания для агента выпуска. См. классические переменные выпуска и артефактов. Дополнительные сведения о $(Release.PrimaryArtifactSourceAlias) смотрите в заметке в предыдущем шаге.

  3. Задайте отображаемое имя значением Set BUNDLE_ROOT environment variable.

    Задать переменную среды BUNDLE_ROOT

  4. Нажмите кнопку "Сохранить > ОК".

Шаг 3.6. Установка средств сборки колес Databricks и Python

  1. Затем установите интерфейс командной строки Databricks и средства сборки колес Python в агенте выпуска. Релизный агент вызовет Databricks CLI и инструменты сборки Python wheel в ближайших задачах. Для этого используйте задачу Bash: снова нажмите 'плюс' в разделе задания агента, выберите задачу Bash на вкладке Утилиты, а затем нажмите Добавить.

  2. Щелкните задачу Bash-скрипта рядом с заданием агента.

  3. Для типа выберите встроенный .

  4. Замените содержимое скрипта следующей командой, которая устанавливает интерфейс командной строки Databricks и средства сборки wheel для Python.

    curl -fsSL https://raw.githubusercontent.com/databricks/setup-cli/main/install.sh | sh
    pip install wheel
    
  5. Задайте отображаемое имя значением Install Databricks CLI and Python wheel build tools.

    Пакеты установки конвейера выпуска Azure DevOps

  6. Нажмите кнопку "Сохранить > ОК".

Шаг 3.7. Проверка пакета активов Databricks

Необходимо на этом шаге убедиться, что файл databricks.yml синтаксически правильным.

  1. Используйте задачу Bash: нажмите кнопку «Плюс» еще раз в разделе задания агента , выберите задачу Bash на вкладке служебные программы и нажмите кнопку Добавить.

  2. Щелкните задачу Bash-скрипта рядом с заданием агента.

  3. Для типа выберите встроенный .

  4. Замените содержимое Script следующей командой, которая использует интерфейс командной строки Databricks для проверки правильности databricks.yml файла:

    databricks bundle validate -t $(BUNDLE_TARGET)
    
  5. Задайте отображаемое имя значением Validate bundle.

  6. Нажмите кнопку "Сохранить > ОК".

Шаг 3.8. Развертывание пакета

На этом шаге вы создадите файл колесика Python и развернете созданный файл колесика Python, две записные книжки Python и файл Python из конвейера выпуска в рабочую область Azure Databricks.

  1. Используйте задачу Bash: нажмите кнопку «Плюс» еще раз в разделе задания агента , выберите задачу Bash на вкладке служебные программы и нажмите кнопку Добавить.

  2. Щелкните задачу Bash-скрипта рядом с заданием агента.

  3. Для типа выберите встроенный .

  4. Замените содержимое скрипта следующей командой, которая использует интерфейс командной строки Databricks для сборки файла колес Python и развертывания примеров файлов этой статьи из конвейера выпуска в рабочей области Azure Databricks:

    databricks bundle deploy -t $(BUNDLE_TARGET)
    
  5. Задайте отображаемое имя значением Deploy bundle.

  6. Нажмите кнопку "Сохранить > ОК".

Шаг 3.9. Запуск записной книжки модульного теста для колеса Python

На этом шаге вы запустите задание, которое запускает записную книжку модульного теста в рабочей области Azure Databricks. Эта тетрадь выполняет модульные тесты логики библиотеки wheel для Python.

  1. Используйте задачу Bash: нажмите кнопку «Плюс» еще раз в разделе задания агента , выберите задачу Bash на вкладке служебные программы и нажмите кнопку Добавить.

  2. Щелкните задачу Bash-скрипта рядом с заданием агента.

  3. Для типа выберите встроенный .

  4. Замените содержимое скрипта следующей командой, которая использует интерфейс командной строки Databricks для запуска задания в рабочей области Azure Databricks:

    databricks bundle run -t $(BUNDLE_TARGET) run-unit-tests
    
  5. Задайте отображаемое имя значением Run unit tests.

  6. Нажмите кнопку "Сохранить > ОК".

Шаг 3.10. Запустите записную книжку, которая вызывает колесо Python

На этом шаге вы запустите задание, которое запускает другую записную книжку в рабочей области Azure Databricks. Эта записная книжка вызывает библиотеку колес Python.

  1. Используйте задачу Bash: нажмите кнопку «Плюс» еще раз в разделе задания агента , выберите задачу Bash на вкладке служебные программы и нажмите кнопку Добавить.

  2. Щелкните задачу Bash-скрипта рядом с заданием агента.

  3. Для типа выберите встроенный .

  4. Замените содержимое скрипта следующей командой, которая использует интерфейс командной строки Databricks для запуска задания в рабочей области Azure Databricks:

    databricks bundle run -t $(BUNDLE_TARGET) run-dabdemo-notebook
    
  5. Задайте отображаемое имя значением Run notebook.

  6. Нажмите кнопку "Сохранить > ОК".

Теперь вы завершили настройку конвейера выпуска. Он должен выглядеть следующим образом:

Конфигурация конвейера выпуска Azure DevOps завершена

Шаг 4. Запуск конвейеров сборки и выпуска

На этом шаге вы выполняете конвейеры вручную. Сведения о том, как автоматически запускать конвейеры, см. в разделе "Указание событий, которые активируют конвейеры и триггеры выпуска".

Чтобы запустить конвейер сборки вручную, выполните следующие действия.

  1. В меню "Конвейеры" на боковой панели щелкните "Конвейеры".
  2. Щелкните имя вашего конвейера сборки, а затем нажмите кнопку Выполнить конвейер.
  3. Для Ветви или тегавыберите имя ветви в репозитории Git, содержащей весь добавленный исходный код. В этом примере предполагается, что это ветвь release .
  4. Щелкните Выполнить. Откроется страница запуска конвейера сборки.
  5. Чтобы просмотреть ход выполнения конвейера сборки и просмотреть связанные журналы, щелкните значок спиннинга рядом с заданием.
  6. После того как значок задания перейдет на зеленый флажок, перейдите к запуску конвейера выпуска.

Чтобы запустить конвейер выпуска вручную, выполните следующие действия.

  1. После успешного завершения конвейера сборки на боковой панели в меню Конвейеры нажмите Выпуски.
  2. Щелкните имя конвейера выпуска и нажмите кнопку "Создать выпуск".
  3. Нажмите кнопку Создать.
  4. Чтобы просмотреть ход выполнения конвейера выпуска, в списке выпусков щелкните имя последнего выпуска.
  5. В поле "Этапы" нажмите кнопку "Этап 1" и щелкните "Журналы".