这是 Azure Developer CLI (azd) 的 7 月回顾。自上次发布以来共发布 5 个版本:1.27.01.27.11.28.01.28.11.29.0。以下是新功能、变更和修复内容,附带 PR 链接供深入了解。

有反馈或问题?欢迎加入 GitHub 版本讨论

亮点:

  • 新增 azd tool uninstall 命令,完善工具安装、升级和卸载生命周期。
  • 扩展支持通过 -s/--source 直接从注册表位置安装,并通过 --no-dependencies 跳过依赖解析。
  • 可在 azure.yaml 中直接建模 Azure AI Foundry 项目、代理及相关资源。
  • Azure App Service 容器部署支持通过 host: appservicelanguage: docker 推送镜像并运行 Web App for Containers。
  • azd 检测到 CI/CD 或 AI 代理环境时自动切换至非交互模式,命令将快速失败而非挂起等待提示。
  • 破坏性变更:azd tool 命令中的 skill --host 标志已重命名为 --agent

🌐 Microsoft Foundry 亮相 AI Engineer World’s Fair

在 Pablo Castro(Microsoft)于 AI Engineer World’s Fair 发表的“On AI and Knowledge”演讲中,Microsoft Foundry 团队展示了基于 azd 扩展平台构建的命令行体验。这是扩展框架可交付成果的优秀范例,也是该平台旨在实现的那类 CLI 故事。观看 YouTube 演示片段 了解实际操作。感谢 Microsoft Foundry 团队在 azd 之上构建!

新功能

🔌 扩展

我们在这些版本中持续优化扩展安装与编写体验。

  • azd extension installazd extension upgradeazd extension list 现支持通过 -s/--source(URL 或本地路径)直接接受注册表位置,无需先运行 azd extension source add。直接位置会在解析前被验证并注册为持久化源。[#8792]
  • azd extension install 新增 --no-dependencies 标志,可仅安装指定扩展而不解析或安装其声明的依赖。[#8927]
  • azure.yaml 中扩展的服务级 env 值暴露给扩展服务配置,使扩展可读取 azd 解析的相同环境值。[#8936]

🧰 工具管理

  • 新增 azd tool uninstall 命令,完善工具安装、升级和卸载生命周期。支持 --all--dry-run、交互式多选、按代理技能移除,以及 --output json[#8794]

🤖 Azure AI Foundry 建模

  • 支持在 azure.yaml 中直接建模 Azure AI Foundry 项目、代理及相关资源,包括 $ref 文件包含、默认安全网络,以及无需 Bicep 和 Terraform 的初始化路径。[#8818]

🏗️ 预配与部署

这些变更扩展了 azd 可部署的范围,并允许扩展参与预配验证,无论提供程序如何。

  • 新增 Azure App Service 容器部署支持。配置为 host: appservicelanguage: docker(或 docker.path)的服务现可将容器镜像推送到 Azure Container Registry (ACR) 并更新站点的容器配置,实现 Web App for Containers 场景。[#8847]
  • 新增与提供程序无关的 provision 验证检查,在每个提供程序的预配前运行。具备 validation-provider 能力的扩展现可贡献客户端检查,无论预配提供程序是 Bicep、Terraform 还是扩展提供的提供程序,而不仅限于 Bicep 本地预检。[#9019]

🤖 CI/CD 与代理环境

  • azd 检测到持续集成与交付 (CI/CD) 或 AI 代理环境时,自动启用非交互(无提示)模式,使命令快速失败并返回清晰错误,而非挂起等待提示。设置 AZD_NON_INTERACTIVE=false 可选择退出。确认提示在标准输入无更多输入时也会遵循默认值。[#9125]

破坏性变更

  • 技能 --host 标志现为 --agentazd tool installazd tool upgradeazd tool uninstall 中,--host 标志已重命名为 --agentazd tool list --output jsonazd tool check --output json 中的已安装技能现按每个代理展开为一行,并包含 agent 字段。请更新传递 --host 或读取旧格式的脚本与 JSON 消费者。[#9045]

🪲 已修复的错误

扩展与工具

  • 修复 azd tool install azure-skills 将 Visual Studio Code Copilot Chat 启动器存根误判为可工作的 Copilot Command Line Interface (CLI) 宿主。宿主选择现使用功能探测,因此安装不再在 macOS 上静默无操作,也不会在 Linux 上卡在 PATH 提示。[#8805]
  • 修复 azd tool uninstall 在具有依赖项(如 vscode-azure-tools)的 Visual Studio Code 扩展以及通过 Homebrew cask 在 macOS 和 Linux 上安装的 GitHub Copilot CLI 场景下的失败问题。卸载现可检测安装所属的包管理器并据此移除,在需要手动移除自管理安装时提供指导。[#8875]
  • 修复生成的 azd extension install 补全,现在可提供扩展 ID 和 .zip 文件路径。[#8887]
  • 修复 azd extension install 在 Windows 上因临时文件锁导致“拒绝访问”错误而间歇性失败的问题。[#9161]
  • 修复并发扩展更新 azure.yaml 时丢失服务字段的问题,通过序列化项目配置写入解决。[#9211]
  • 修复并改进了项目扩展需求的自动安装,使 azd 在项目命令运行前解析 azure.yaml 中声明或推断的所有缺失提供程序,而非在遇到第一个不支持的提供程序时失败。[#9218]

预配与配置

  • 修复使用扩展提供服务主机或预配提供程序的项目在 azd env refresh 时的行为,并在尚无部署时报告成功。[#9017]
  • 修复 azure.yaml 序列化时为使用无代码资源主机(如 azure.ai.projectazure.ai.connectionmicrosoft.foundry)的服务写入空 projectlanguage 字段的问题;这些字段为空时现将被省略。[#8937]
  • 默认从模型目录和配额提示中排除已弃用的模型。[#8842]
  • 停止将环境 .env 文件中定义的动态链接器和加载器控制变量(如 LD_PRELOADLD_LIBRARY_PATHLD_AUDITDYLD_INSERT_LIBRARIES)转发到 docker、npm 和 python 等工具子进程。[#8949]
  • 修复 azd deploy 对基于容器的 Azure App Service 服务覆盖无关站点配置的问题;容器镜像现通过专用的 App Service 配置端点更新。[#9281]

持续集成与更新

  • 修复 azd down --no-prompt 在 Terraform 项目的 CI/CD 中挂起的问题,通过在非交互运行时自动批准销毁;修复 azd down --force 在全新代理上因后端初始化错误而失败的问题。[#9143]
  • 修复 azd update 后续命令使用 azd version。感谢 @rguptar 的贡献![#9083]

其他变更

  • 在扩展软件开发工具包 (SDK) 的 ServiceConfig 上暴露服务的 uses(依赖)列表,使扩展可直接读取服务和资源依赖,而非通过 SetServiceConfigValue[#8838]
  • 新增扩展 SDK 辅助方法,用于验证 extension.yaml 中的提供程序声明与扩展代码注册的提供程序是否一致。[#9033]
  • 将 Azure 资源管理器 (ARM) 请求关联 ID 作为规范带连字符的全局唯一标识符发送,该 ID 从 OpenTelemetry 跟踪 ID 无损派生,而非未修饰的 32 字符字符串。此变更涵盖 azd 直接 ARM 调用的 x-ms-correlation-request-id 标头以及传递给 Terraform AzureRM 提供程序的 ARM_CORRELATION_REQUEST_ID 值,使 azd 与 ARM 规范及其他 Azure 工具保持一致。[#9141]
  • 停止显示自动的 azd tool 首次运行安装提示和定期更新通知。显式 azd tool 命令不受影响。[#9261]
  • provisionupdown 上发出 infra.provider 遥测属性,以便按基础设施提供程序对预配运行进行分段。[#9091]
  • execution.environment 遥测字段中识别来自 Microsoft Foundry Skill 的 azd 调用。[#9167]
  • execution.environment 遥测字段中将 GitHub Copilot 应用与 GitHub Copilot CLI 分别报告。[#9288]
  • 将捆绑的 GitHub CLI 更新至 v2.96.0。[#9245]

新文档

Microsoft Learn 上新增和更新的 azd 文档:

  • 使用 azd tool 管理 Azure 开发工具(7 月 27 日)——已更新以反映 1.28.1 变更,移除自动 azd tool 首次运行安装提示和定期更新通知,使参考文档与当前按需行为一致。
  • 使用 Azure Pipelines 配置管道并推送更新(7 月 28 日)——更正了 azd pipeline config 与 Azure DevOps 的 OpenID Connect (OIDC) 和联合凭证指导,并刷新了 GitHub Actions 和 Azure DevOps 的示例链接。
  • 设置 Copilot 云代理开发环境(7 月 17 日)——已更新以反映“Copilot coding agent”重命名为“cloud agent”,包括全文的文件和链接更新。
  • azure.yaml 架构参考(7 月 16 日)——已刷新 Azure AI Foundry azure.yaml 统一变更,记录用于在 azure.yaml 中直接建模 Foundry 项目、代理及相关资源的 Microsoft Foundry 主机。

新模板

社区模板可帮助您更快上手,涵盖常见场景,并展示如何使用 Azure Developer CLI 部署真实解决方案。

  • Azure Functions 计时器触发器快速入门Azure Functions 团队 提供,将计时器触发器模式扩展至五种语言。每个示例均使用 azd 部署到 Azure Functions Flex Consumption,采用托管标识和虚拟网络实现默认安全:
    • Python:使用 Python 编写的 Azure Functions 计时器触发器快速入门。
    • JavaScript:使用 JavaScript 编写的 Azure Functions 计时器触发器快速入门。
    • TypeScript:使用 TypeScript 编写的 Azure Functions 计时器触发器快速入门。
    • Java:使用 Java 编写的 Azure Functions 计时器触发器快速入门。
    • PowerShell:使用 PowerShell 编写的 Azure Functions 计时器触发器快速入门。
  • Durable Functions fan-out/fan-in 快速入门Azure Functions 团队 提供,在五种语言中演示 fan-out/fan-in 编排模式,每个示例均使用 azd 部署到 Azure Functions Flex Consumption,采用托管标识和虚拟网络:
    • Java:使用 Java 编写的 Durable Functions fan-out/fan-in 快速入门。
    • JavaScript:使用 JavaScript 编写的 Durable Functions fan-out/fan-in 快速入门。
    • TypeScript:使用 TypeScript 编写的 Durable Functions fan-out/fan-in 快速入门。
    • Python:使用 Python 编写的 Durable Functions fan-out/fan-in 快速入门。
    • PowerShell:使用 PowerShell 编写的 Durable Functions fan-out/fan-in 快速入门。
  • 远程 Model Context Protocol (MCP) Functions 示例Azure Functions 团队 提供,展示如何在 Azure Functions 上构建和部署自定义远程 MCP 服务器:
    • 使用 JavaScript 的远程 MCP Functions:此场景演示如何使用 Azure Functions 和 JavaScript 在云端构建和部署自定义远程 MCP 服务器,使用 Microsoft Entra 作为身份提供程序内置身份验证。
    • 使用 Durable Functions 的长时间运行 MCP 工具 (.NET):一个 .NET 隔离的 Azure Functions MCP 服务器,通过 Durable Functions 和预算化 start-and-poll 模式支持长时间运行的 MCP 工具,使用 Durable Task Scheduler 后端和托管标识通过 azd 部署。
  • 使用 Azure Developer CLI (Terraform) 的 Azure Functions C# HTTP 触发器Azure Functions 团队 提供:使用 C#(隔离工作进程)编写的 Azure Functions HTTP 触发器快速入门,使用 Terraform 作为基础设施即代码提供程序,通过 azd 部署到 Azure Functions Flex Consumption,采用托管标识和虚拟网络实现默认安全部署。
  • 使用 Azure API Management 和 Application Gateway 的 mTLSRonald Bosma 提供:演示通过 Azure API Management 和 Application Gateway 实现双向传输层安全 (mTLS)。展示如何在直接调用 API Management 以及在 Application Gateway 之后调用时验证客户端证书,以及如何使用 mTLS 保护从 API Management 到后端系统的连接。感谢 Ronald Bosma 的贡献!

Azure Developer CLI 模板库因社区贡献持续增长。感谢大家!

🙋‍♀️ 初识 azd?

如果您是 Azure Developer CLI 的新用户,azd 是一款开源命令行工具,可帮助您将应用程序从本地开发环境更快地部署到 Azure。它提供开发者友好的命令,映射到工作流的关键阶段,无论您是在终端、编辑器还是 CI/CD 中工作。