使用 Azure DevOps 在 Azure Databricks 上進行持續整合和傳遞

注意

本文涵蓋 Azure DevOps,Databricks 既未提供也不支援。 若要連絡提供者,請參閱 Azure DevOps Services 支援

本文會引導您為使用 Azure Databricks 的程式代碼和成品設定 Azure DevOps 自動化。 具體來說,您將設定持續整合和傳遞 (CI/CD) 工作流程以連線到 Git 存放庫、使用 Azure Pipelines 來建置和單元測試 Python 轉輪 (*.whl), 並將其部署以用於 Databricks 筆記本。

CI/CD 開發工作流程

Databricks 建議使用 Azure DevOps 進行 CI/CD 開發的下列工作流程:

  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 程式代碼。

提示

如需搭配 Azure Databricks 而非 Azure DevOps 使用 Jenkins 的相關信息,請參閱 在 Azure Databricks 上使用 Jenkins 的 CI/CD。

本文的其餘部分說明 Azure DevOps 中的一組範例管線,您可以適應自己的 Azure Databricks 需求。

關於範例

本文的範例使用兩個管線來收集、部署和執行儲存在遠端 Git 存放庫中的範例 Python 程式代碼和 Python 筆記本。

第一個管線稱為 置管線,會準備第二個管線的 組建成品,稱為發行 管線。 將組建管線與發行管線分開,可讓您建立組建成品,而不需要部署它,或同時從多個組建部署成品。 若要建構組建和發行管線:

  1. 建立建置管線的 Azure 虛擬機。
  2. 將檔案從 Git 存放庫複製到虛擬機。
  3. 建立包含 Python 程式代碼、Python 筆記本和相關組建、部署及執行配置檔的 gzip ed tar 檔案。
  4. 將 gzip'ed tar 檔案當做 zip 檔案複製到發行管線存取的位置。
  5. 為發行管線建立另一個 Azure 虛擬機。
  6. 從組建管線的位置取得 zip 檔案,然後解除封裝 zip 檔案,以取得 Python 程式代碼、Python 筆記本,以及相關的組建、部署和執行配置檔。
  7. 將 Python 程式代碼、Python 筆記本和相關組建、部署及執行配置檔部署至遠端 Azure Databricks 工作區。
  8. 將 Python 轉輪連結庫的元件程式代碼檔案建置至 Python 轉輪檔案。
  9. 在元件程式代碼上執行單元測試,以檢查 Python 轉輪檔案中的邏輯。
  10. 執行 Python 筆記本,其中一個會呼叫 Python 滾輪檔案的功能。

關於 Databricks CLI

本文的範例示範如何在管線內的非互動式模式中使用 Databricks CLI 。 本文的範例管線會部署程式代碼、建置連結庫,並在 Azure Databricks 工作區中執行筆記本。

如果您在管線中使用 Databricks CLI 而不實作本文中的範例程式代碼、連結庫和筆記本,請遵循下列步驟:

  1. 準備您的 Azure Databricks 工作區,以使用 OAuth 機器對機器 (M2M) 驗證來驗證服務主體。 開始之前,請先確認您有 Microsoft Entra ID(先前稱為 Azure Active Directory)服務主體,並具有 Azure Databricks OAuth 秘密。 請參閱 OAuth 計算機對電腦 (M2M) 驗證

  2. 在管線中安裝 Databricks CLI。 若要這樣做,請將 Bash腳本 工作新增至您的管線,以執行下列腳本:

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

    若要將 Bash腳本 工作新增至管線,請參閱 步驟3.6。安裝 Databricks CLI 和 Python 轉輪建置工具

  3. 設定管線以啟用已安裝的 Databricks CLI,以向工作區驗證您的服務主體。 若要這樣做,請參閱 步驟 3.1:定義發行管線的環境變數。

  4. 視需要將更多 Bash腳本 工作新增至管線,以執行 Databricks CLI 命令。 請參閱 Databricks CLI 命令

開始之前

若要使用本文的範例,您必須具備:

  • 現有的 Azure DevOps 專案。 如果您還沒有專案,請在 Azure DevOps 中建立專案。
  • 具有 Azure DevOps 支援的 Git 提供者的現有存放庫。 您將將 Python 範例程式代碼、範例 Python 筆記本,以及相關的版本配置檔新增至此存放庫。 如果您還沒有存放庫,請遵循 Git 提供者的指示建立一個存放庫。 然後,如果您尚未這麼做,請將 Azure DevOps 項目連線到此存放庫。 如需指示,請遵循支援的來源存放庫中的連結
  • 本文的範例會使用 OAuth 計算機對計算機 (M2M) 驗證,向 Azure Databricks 工作區驗證 Microsoft Entra ID(先前稱為 Azure Active Directory) 服務主體。 您必須擁有 Microsoft Entra ID 服務主體,且具有該服務主體的 Azure Databricks OAuth 秘密。 請參閱 OAuth 計算機對電腦 (M2M) 驗證

步驟 1:將範例的檔案新增至您的存放庫

在此步驟中,在具有第三方 Git 提供者的存放庫中,您會新增您 Azure DevOps 管線在遠端 Azure Databricks 工作區上建置、部署及執行的所有範例檔案。

步驟 1.1:新增 Python 轉輪元件檔案

在本文中的範例中,您的 Azure DevOps 管線會建置和單元測試 Python 轉輪檔案。 Azure Databricks Notebook 接著會呼叫建置的 Python 轉輪檔案功能。

若要定義 Notebook 執行所針對 Python 轉輪檔案的邏輯和單元測試,請在存放庫根目錄中建立名為 和 test_addcol.py的兩個Libraries檔案addcol.py,並將其新增至資料夾中名為 python/dabdemo/dabdemo 的資料夾結構,如下所示:

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

檔案 addcol.py 包含連結庫函式,稍後會內建至 Python 轉輪檔案,然後安裝在 Azure Databricks 叢集上。 這是一個簡單的函式,可將常值填入的新數據行新增至 Apache Spark DataFrame:

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

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

檔案 test_addcol.py 包含測試,以將模擬 DataFrame 物件傳遞至 with_statusaddcol.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 轉輪檔案中,請建立名為 __init__.py 的檔案,並在 __main__.py 與上述兩個檔案相同的資料夾中建立兩個檔案。 此外,在資料夾中建立名為 setup.pypython/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 包含將連結庫建置至 Python 轉輪檔案的其他設定。 將、 <my-author-name>@<my-organization><my-package-description> 取代<my-url>為有效值:

# 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 CLI 會執行筆記本作業。 此作業會執行具有檔名的 run_unit_tests.pyPython 筆記本。 此筆記本會針對 Python 滾輪連結庫的邏輯執行 pytest

若要執行本文範例的單元測試,請將 新增至存放庫的根目錄,其中含有下列內容名為 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 CLI 會執行另一個筆記本作業。 此筆記本會建立 DataFrame 物件、將它傳遞給 Python 滾輪連結庫的 with_status 函式、列印結果,以及報告作業的執行結果。 使用下列內容建立名為 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 資產套件組合,稱為 套件組合,可讓您將完整的數據、分析和 ML 專案表示為來源檔案的集合。 請參閱 什麼是 Databricks 資產套件組合?

若要設定本文範例的套件組合,請在存放庫的根目錄中建立名為 databricks.yml的檔案。 在此範例 databricks.yml 檔案中,取代下列佔位元:

  • 將取代 <bundle-name> 為套件組合的唯一程式設計名稱。 例如: azure-devops-demo
  • 將 取代 <job-prefix-name> 為一些字串,以協助唯一識別在此範例的 Azure Databricks 工作區中建立的作業。 例如: azure-devops-demo
  • 以作業叢集的 Databricks 執行時間版本識別碼取代 <spark-version-id> ,例如 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 Asset Bundle 組態

步驟 2:定義組建管線

Azure DevOps 提供雲端裝載的使用者介面,以使用 YAML 定義 CI/CD 管線的階段。 如需 Azure DevOps 和管線的詳細資訊,請參閱 Azure DevOps 檔

在此步驟中,您會使用 YAML 標記來定義建置管線,以建置部署成品。 若要將程式代碼部署至 Azure Databricks 工作區,您可以將此管線的組建成品指定為發行管線的輸入。 您稍後會定義此發行管線。

為了執行建置管線,Azure DevOps 提供雲端裝載的隨選執行代理程式,可支援部署至 Kubernetes、VM、Azure Functions、Azure Web Apps,以及更多目標。 在此範例中,您會使用隨選代理程式來自動建置部署成品。

定義本文的建置管線範例,如下所示:

  1. 登入 Azure DevOps,然後按兩下 [登入] 連結以開啟您的 Azure DevOps 專案。

    注意

    如果 Azure 入口網站顯示而不是您的 Azure DevOps 專案,請按兩下 [更多服務 > ][Azure DevOps 組織 > 我的 Azure DevOps 組織 ],然後開啟您的 Azure DevOps 專案。

  2. 按兩下 提要欄位中的 [管線 ],然後按兩下 [管線] 功能表上的 [管線 ]。

    Azure DevOps 管線功能表

  3. 按兩下 [ 新增管線] 按鈕,並遵循畫面上的指示。 (如果您已經有管線,請按兩下 請改為建立管線 。)在這些指示結束時,管線編輯器隨即開啟。 在這裡,您會在出現的檔案中 azure-pipelines.yml 定義組建管線腳本。 如果在指示結尾看不到管線編輯器,請選取組建管線的名稱,然後按兩下 [ 編輯]。

    您可以使用 Git 分支選取器 Git 分支選取器 來自定義 Git 存放庫中每個分支的建置程式。 CI/CD 最佳做法是不要直接在存放庫的 main 分支中執行生產工作。 這個範例假設存放庫中存在名為 release 的分支,而不是 main

    Azure DevOps Pipeline 編輯器

    根據 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. 您可以按兩下 閃電圖示 以在畫面邊顯示觸發選項,以設定管線的觸發方式。 如果您想要根據組建成品可用性或在提取要求工作流程之後自動起始發行,請啟用適當的觸發程式。 目前,在此範例中,在本文中的最後一個步驟中,您會手動觸發組建管線,然後觸發發行管線。

    Azure DevOps 發行管線階段 1

  6. 按兩下 [ 儲存 > 確定]。

步驟 3.1:定義發行管線的環境變數

此範例的發行管線依賴下列環境變數,您可以按兩下 [變數] 索引卷標的 [管線變數] 區段中的 [新增],並將 [階段 1] 範圍新增:

  • BUNDLE_TARGET,這應該符合 target 檔案 databricks.yml 中的名稱。 在本文中的範例中,這是 dev
  • DATABRICKS_HOST,表示 Azure Databricks 工作區的個別工作區 URLhttps://例如 https://adb-<workspace-id>.<random-number>.azuredatabricks.net。 請勿在 之後.net包含尾端/
  • DATABRICKS_CLIENT_ID,表示 Microsoft Entra ID 服務主體的應用程式識別碼。
  • DATABRICKS_CLIENT_SECRET,代表 Microsoft Entra ID 服務主體的 Azure Databricks OAuth 秘密。

步驟 3.2:設定發行管線的版本代理程式

  1. 按兩下 Stage 1 物件內的 1 個作業、0 個工作連結。

    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 版本與後續工作中呼叫的腳本相容。 在此情況下,按兩下 Agent 作業旁的 [使用 Python 3.x] 工作,然後將 [版本規格] 設定3.10。 同時將 [顯示名稱] 設定Use Python 3.10。 此管線假設您在已安裝 Python 3.10.12 的叢集上使用 Databricks Runtime 13.3 LTS。

    Azure DevOps 設定 Python 第 2 版

  4. 按兩下 [ 儲存 > 確定]。

步驟 3.4:從組建管線解除封裝組建成品

  1. 接下來,讓發行代理程式使用擷取檔案工作,從 zip 檔案擷取 Python 轉盤檔案、相關的發行配置檔、筆記本和 Python 程式代碼檔案:單擊 [代理程序作業] 區段中的加號,選取 [公用程式] 索引卷標上的 [擷取檔案] 工作,然後按兩下 [新增]。

  2. 按兩下 Agent 作業旁的 [擷取檔案] 工作,將 [封存盤案模式] 設定**/*.zip,然後將 [目的地] 資料夾設定為系統變數 $(Release.PrimaryArtifactSourceAlias)/Databricks 同時將 [顯示名稱] 設定Extract build pipeline artifact

    注意

    $(Release.PrimaryArtifactSourceAlias) 表示 Azure DevOps 產生的別名,以識別發行代理程式上的主要成品來源位置,例如 _<your-github-alias>.<your-github-repo-name>。 發行管線會將此值設定為發行代理程式的初始化作業階段中的環境變數RELEASE_PRIMARYARTIFACTSOURCEALIAS。 請參閱 傳統版本和成品變數

  3. 將 [顯示名稱] 設定Extract build pipeline artifact

    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 CLI 和 Python 轉輪建置工具

  1. 接下來,在發行代理程式上安裝 Databricks CLI 和 Python 轉輪建置工具。 發行代理程式會在後續幾個工作中呼叫 Databricks CLI 和 Python 轉輪建置工具。 若要這樣做,請使用Bash工作:按兩下 [代理程式作業] 區段中的加號,選取 [公用程式] 索引標籤標的Bash工作,然後按兩下 [新增]。

  2. 按兩下 Agent 作業旁的Bash腳本工作

  3. 針對 [ 類型],選取 [ 內嵌]。

  4. 使用下列命令取代文本的內容,以安裝 Databricks CLI 和 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. 按兩下 Agent 作業旁的Bash腳本工作

  3. 針對 [ 類型],選取 [ 內嵌]。

  4. 使用下列命令取代 Script 的內容,它會使用 Databricks CLI 來檢查檔案是否databricks.yml語法正確:

    databricks bundle validate -t $(BUNDLE_TARGET)
    
  5. 將 [顯示名稱] 設定Validate bundle

  6. 按兩下 [ 儲存 > 確定]。

步驟 3.8:部署套件組合

在此步驟中,您會建置 Python 轉輪檔案,並將建置的 Python 轉輪檔案、兩個 Python Notebook 和 Python 檔案從發行管線部署到 Azure Databricks 工作區。

  1. 使用Bash工作:按兩下 [代理程式作業] 區段中的加號,選取 [公用程式] 索引標籤上的Bash工作,然後按兩下[新增]。

  2. 按兩下 Agent 作業旁的Bash腳本工作

  3. 針對 [ 類型],選取 [ 內嵌]。

  4. 使用下列命令取代腳本的內容,它會使用 Databricks CLI 來建置 Python 轉輪檔案,並將本文的範例檔案從發行管線部署到 Azure Databricks 工作區:

    databricks bundle deploy -t $(BUNDLE_TARGET)
    
  5. 將 [顯示名稱] 設定Deploy bundle

  6. 按兩下 [ 儲存 > 確定]。

步驟 3.9:執行 Python 滾輪的單元測試筆記本

在此步驟中,您會執行在 Azure Databricks 工作區中執行單元測試筆記本的作業。 此筆記本會針對 Python 滾輪連結庫的邏輯執行單元測試。

  1. 使用Bash工作:按兩下 [代理程式作業] 區段中的加號,選取 [公用程式] 索引標籤上的Bash工作,然後按兩下[新增]。

  2. 按兩下 Agent 作業旁的Bash腳本工作

  3. 針對 [ 類型],選取 [ 內嵌]。

  4. 使用下列命令取代文本的內容,以使用 Databricks CLI 在 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. 按兩下 Agent 作業旁的Bash腳本工作

  3. 針對 [ 類型],選取 [ 內嵌]。

  4. 使用下列命令取代文本的內容,以使用 Databricks CLI 在 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],然後按兩下 [記錄]。