Azure Pipeline 多json文件内相同键转换实现方案咨询
解决方案:使用内置PowerShell任务批量替换多文件相同配置键
核心逻辑:利用Azure Pipeline Windows代理原生内置的PowerShell能力,直接遍历所有租户的配置文件完成键值替换,无需安装任何第三方扩展,也不受官方File Transform任务的唯一键限制。
步骤1:在Pipeline中定义连接字符串变量
根据你的实际场景定义变量:
- 如果所有租户共用同一个连接字符串,直接定义名为
GlobalConnectionString的变量即可,敏感值记得勾选保密属性 - 如果每个租户使用独立的连接字符串,按
{租户名}_ConnStr的规则定义变量,比如Tenant1_ConnStr、Tenant2_ConnStr,所有敏感值勾选保密属性
步骤2:添加PowerShell任务到Pipeline
在部署任务执行前新增PowerShell任务,选择「内联脚本」模式,根据场景选择对应脚本即可:
场景A:所有租户使用统一ConnectionString
# 配置:指定租户appSettings.json的搜索路径,可根据实际存储规则调整 $searchPath = "$(System.DefaultWorkingDirectory)/**/appSettings.json" # 读取Pipeline中定义的全局连接字符串变量 $targetValue = "$(GlobalConnectionString)" # 遍历所有匹配的配置文件 Get-ChildItem -Path $searchPath -Recurse | ForEach-Object { # 读取并解析JSON内容 $json = Get-Content $_.FullName | ConvertFrom-Json # 替换ConnectionString值,若该键不是JSON顶级节点,可调整属性路径,例:$json.ConnectionStrings.DefaultConnection $json.ConnectionString = $targetValue # 写回文件,使用UTF8编码避免乱码 $json | ConvertTo-Json -Depth 10 | Set-Content $_.FullName -Encoding UTF8 Write-Host "已完成配置更新:$($_.FullName)" }
场景B:每个租户使用独立ConnectionString
OrchardCore默认租户配置存放在App_Data/Sites/{租户名}/appSettings.json路径下,可直接通过文件夹名匹配对应变量:
# 配置:指定OrchardCore租户配置根目录 $tenantRoot = "$(System.DefaultWorkingDirectory)/App_Data/Sites" Get-ChildItem -Path $tenantRoot -Filter "appSettings.json" -Recurse | ForEach-Object { # 从路径提取租户名称 $tenantName = $_.Directory.Name # 匹配对应的Pipeline变量 $variableName = "$($tenantName)_ConnStr" $targetValue = [Environment]::GetEnvironmentVariable($variableName) if (-not $targetValue) { Write-Warning "未找到租户$tenantName对应的连接字符串变量,跳过更新" return } # 更新配置 $json = Get-Content $_.FullName | ConvertFrom-Json $json.ConnectionString = $targetValue $json | ConvertTo-Json -Depth 10 | Set-Content $_.FullName -Encoding UTF8 Write-Host "已完成租户$tenantName的连接字符串更新" }
注意事项
- 若你的
ConnectionString不是JSON的顶级节点,只需调整脚本中的属性访问路径即可,比如存放在ConnectionStrings节点下就修改为$json.ConnectionStrings.ConnectionString - 可根据实际项目的文件存储规则调整搜索路径,避免误改其他无关JSON文件
- 脚本完全使用Windows代理内置的PowerShell能力,无任何外部依赖,符合不能使用第三方扩展的要求
内容的提问来源于stack exchange,提问作者Overide
相关产品推荐
相关产品推荐

