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

如何在Azure DevOps中通过工作负载身份联合发布EF Core迁移包并执行efbundle.exe

在Azure DevOps中通过工作负载身份联合发布EF Core迁移包并执行efbundle.exe

一、Azure DevOps中配置工作负载身份联合完成数据库认证

1. 配置工作负载身份服务连接

在Azure DevOps项目的项目设置 > 服务连接中,创建Azure资源管理器类型的服务连接:

  • 选择工作负载身份联合作为认证方式
  • 关联你已配置数据库权限的服务主体(SP)
  • 确保该服务主体拥有目标SQL Server/数据库所在资源组的必要权限(如SQL DB Contributor,配合已执行的数据库用户创建语句)

2. 生成EF Core迁移包(efbundle.exe)

在本地或CI管道中,执行以下命令生成包含迁移的独立可执行文件:

dotnet ef migrations bundle --output efbundle.exe

这个bundle包含所有迁移依赖,无需额外安装.NET环境即可运行。

3. 创建发布管道执行迁移

添加PowerShell或Azure CLI任务到发布管道:

  • 选择之前配置的工作负载身份服务连接作为Azure订阅
  • 在任务脚本中获取Azure AD访问令牌并执行efbundle:
# 获取数据库访问令牌
$token = az account get-access-token --resource https://database.windows.net/ --query accessToken -o tsv

# 执行迁移
.\efbundle.exe --connection "Server=tcp:<你的SQL服务器名>.database.windows.net,1433;Database=<目标数据库名>;AccessToken=$token;"

二、在Azure环境中直接执行efbundle.exe

1. 基于工作负载身份认证

如果目标Azure资源(VM、ACI、容器应用等)已启用工作负载身份并关联授权的服务主体:

  • 通过托管身份完成Azure认证:
az login --identity
  • 获取数据库访问令牌:
token=$(az account get-access-token --resource https://database.windows.net/ --query accessToken -o tsv)
  • 执行efbundle(Linux环境需先添加执行权限):
# Linux环境
chmod +x efbundle
./efbundle --connection "Server=tcp:<你的SQL服务器名>.database.windows.net,1433;Database=<目标数据库名>;AccessToken=$token;"

# Windows环境
.\efbundle.exe --connection "Server=tcp:<你的SQL服务器名>.database.windows.net,1433;Database=<目标数据库名>;AccessToken=$token;"

2. 关键注意事项

  • 确保服务主体已通过CREATE USER <service principal name> FROM EXTERNAL PROVIDER...语句添加到数据库,并授予足够权限(如db_ddladmin或db_owner)
  • efbundle需匹配目标环境的操作系统,编译时可通过--runtime参数指定,例如:
dotnet ef migrations bundle --output efbundle --runtime linux-x64
  • 连接字符串无需包含用户名/密码,通过Azure AD令牌完成认证即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 22:30:15