You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需复制流水线:Azure CICD部署Databricks Notebook的按需方案问询

解决方案

一、无需复制流水线实现单项目/指定文件夹部署

可以通过给PowerShell脚本添加可选参数,并在Azure发布流水线中配置运行时输入参数来实现,无需复制流水线。具体步骤如下:

1. 修改PowerShell脚本,添加目标文件夹参数

在脚本开头新增参数接收逻辑,支持手动指定要部署的文件夹,默认仍部署全量文件夹:

param(
    [string]$build_dir,
    [string]$target_ENV,
    [string]$TargetFolders = "" # 新增:接收逗号分隔的文件夹路径字符串
)

# 定义所有默认文件夹
$admin_dir = "/ADMIN/"
$data_dir = "/DATA/"
$data_project1 = "/Project 1/"
$data_project2 = "/Project 2/"
$data_project3 = "/Project 3/"

# 确定最终要部署的文件夹列表
if (-not [string]::IsNullOrEmpty($TargetFolders)) {
    # 拆分逗号分隔的字符串为数组,去掉多余空格
    $nb_folders = $TargetFolders -split ',' | ForEach-Object { $_.Trim() }
} else {
    # 默认部署所有文件夹(修正原代码中重复的$data_project3)
    $nb_folders = @($admin_dir, $data_dir, $data_project1, $data_project2, $data_project3)
}

# --- 原有脚本逻辑保持不变 ---
foreach ($nb_folder in $nb_folders) {
    if ($target_ENV -eq 'd') {
        Write-Host "The environment is dev, so we don't change resource names in notebooks"
    }
    else {
        $nb_dir = $build_dir + $nb_folder
        Write-Host "Changing variables in notebooks"
        $files = gci -File -Path $nb_dir
        foreach ($f in $files) {
            Write-Output $f.name
            for ($i = 0; $i -lt $replace_str.Count; $i++) {
            (Get-Content $nb_dir\$f).replace($replace_str[$i].Source, $replace_str[$i].Target) | Set-Content $nb_dir\$f
            }
        }

        if ($target_ENV -eq 'p') {
            foreach ($f in $files) {
                Write-Output $f.name
                for ($i = 0; $i -lt $prd_replace_str.Count; $i++) {
                (Get-Content $nb_dir\$f).replace($prd_replace_str[$i].Source, $prd_replace_str[$i].Target) | Set-Content $nb_dir\$f
                }
            }
        }
    }
    if ($target_ENV -eq 'd') {
        Write-Host "The environment is dev, so command for copying scripts from repo will be skipped"   
    }
    else {
        Import-DatabricksFolder -BearerToken $DatabricksToken -Region "westeurope" -LocalPath $nb_dir -DatabricksPath $nb_folder
    }
}

#-------------------------------
# Cleanup
#-------------------------------

#Remove-Item $nb_dir\*

2. 修改Azure流水线YAML,添加运行时参数

在流水线YAML中定义可手动输入的参数,并将其传递给PowerShell脚本:

# 定义流水线运行时参数
parameters:
- name: targetFolders
  type: string
  default: ""
  displayName: '指定要部署的文件夹(多个路径用逗号分隔,例如"/Project 1/,/ADMIN/")'

steps:
- task: PowerShell@2
  displayName: 'Deploy notebooks'
  inputs:
    targetType: filePath
    filePath: './$(drop)/Deployment Scripts/Databricks/ads_deploynotebooks.ps1'
    arguments: >
      -build_dir $(drop)/Databricks/notebooks
      -target_ENV $(target_ENV)
      -TargetFolders "${{ parameters.targetFolders }}"
  # 传递环境变量target_ENV到脚本
  env:
    target_ENV: $(target_ENV)

二、UAT环境下允许用户自定义部署文件夹

针对UAT环境($target_ENV -eq 'u'),可以通过以下方式限制仅在该环境下允许用户自定义:

  1. 在脚本中添加逻辑校验:如果是UAT环境且未指定TargetFolders,可提示用户输入或直接报错(根据需求调整):
# 在确定$nb_folders之前添加校验
if ($target_ENV -eq 'u' -and [string]::IsNullOrEmpty($TargetFolders)) {
    Write-Error "UAT环境部署必须指定要部署的文件夹,请在流水线触发时填写targetFolders参数"
    exit 1
}
  1. 在Azure流水线中配置参数可见性:利用Azure DevOps的阶段条件,仅在UAT阶段显示targetFolders参数(需将流水线按环境拆分阶段),示例如下:
stages:
- stage: DeployUAT
  displayName: Deploy to UAT
  condition: eq(variables['target_ENV'], 'u')
  jobs:
  - job: DeployNotebooks
    steps:
    - task: PowerShell@2
      displayName: 'Deploy notebooks to UAT'
      inputs:
        targetType: filePath
        filePath: './$(drop)/Deployment Scripts/Databricks/ads_deploynotebooks.ps1'
        arguments: >
          -build_dir $(drop)/Databricks/notebooks
          -target_ENV $(target_ENV)
          -TargetFolders "${{ parameters.targetFolders }}"
      env:
        target_ENV: $(target_ENV)

手动触发UAT阶段时,用户必须填写targetFolders参数才能继续部署。

使用场景示例

  • 生产环境仅部署项目1:手动触发流水线时,在targetFolders参数中输入"/Project 1/",脚本只会同步该文件夹下的内容。
  • UAT环境部署项目1+ADMIN文件夹:输入"/Project 1/,/ADMIN/"即可批量部署指定文件夹。

内容的提问来源于stack exchange,提问作者Greencolor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 03:36:11