本文已自动翻译。如需查看原始版本,请点击此处。
如果你曾经有一个完全用.NET构建的项目,却还需要为azd钩子编写Bash脚本,你一定懂那种痛苦。当项目其他部分都是C#时,为什么要在pre-provisioning步骤中切换到Shell语法呢?
这个问题现在有了官方解决方案。Azure Developer CLI 刚刚发布了钩子的多语言支持,效果正如预期的那么好。
什么是钩子
钩子是在azd生命周期关键节点运行的脚本——预置配置之前、部署之后等。它们在azure.yaml中定义,无需修改CLI即可注入自定义逻辑。
此前只支持Bash和PowerShell。现在可以使用Python、JavaScript、TypeScript或.NET——azd会自动处理其余的一切。
检测机制
只需将钩子指向一个文件,azd就会从文件扩展名推断语言:
hooks:
preprovision:
run: ./hooks/setup.py
postdeploy:
run: ./hooks/seed.ts
postprovision:
run: ./hooks/migrate.cs
无需额外配置。如果扩展名不明确,可以添加kind: python(或相应语言)来明确指定。
各语言的重要细节
Python
在脚本旁边(或任意父目录中)放置requirements.txt或pyproject.toml,azd会自动创建虚拟环境、安装依赖并运行脚本。
JavaScript和TypeScript
同样的模式——在脚本附近放置package.json,azd会先运行npm install。对于TypeScript,使用npx tsx,无需编译步骤,也不需要tsconfig.json。
.NET
提供两种模式:
- 项目模式:如果脚本旁边有
.csproj文件,azd会自动运行dotnet restore和dotnet build。 - 单文件模式:在.NET 10+上,独立的
.cs文件可通过dotnet run script.cs直接运行,无需项目文件。
执行器特定配置
每种语言都支持可选的config块:
hooks:
preprovision:
run: ./hooks/setup.ts
config:
packageManager: pnpm
postprovision:
run: ./hooks/migrate.cs
config:
configuration: Release
framework: net10.0
对.NET开发者的意义
钩子曾是基于azd的项目中最后一个强制语言切换的地方。现在,整个部署流水线——从应用代码到基础设施脚本再到生命周期钩子——都可以使用同一种语言。你可以在钩子中复用现有的.NET工具,引用共享类库,不再需要维护Shell脚本。
总结
这看起来是个小改动,但它切实减少了日常azd工作流程中的摩擦。钩子的多语言支持现已可用——查阅官方文章获取完整文档。
