我在 Azure 容器应用程序中使用容器化自托管 Azure Devops 代理。这工作正常。现在,我想创建多个具有不同技术堆栈的代理。我在 ACR 中创建并托管了这些图像。现在,我应该在同一个 Azure 容器环境中创建多个 Azure 容器作业,还是在一个同一个 Azure 容器作业中使用多个容器? 另外,我的管道如何知道应该根据应用程序技术堆栈运行哪个容器作业?
要部署具有不同技术堆栈的多个 Azure DevOps 代理,您有两种选择
同一 Azure 容器环境中的多个 Azure 容器应用程序作业。这种方法使每个代理在自己的工作中保持隔离,从而可以更好地控制每个技术堆栈的扩展和资源分配。
单个 Azure 容器应用程序作业中的多个容器,这有点复杂,但技术上可行。在单个作业中使用多个容器可能会导致资源争用以及管理不同映像的复杂性。
所以我推荐选项 1,即为同一容器环境中的每个代理创建多个容器应用程序作业
假设您的 acr、代理映像和容器应用程序环境已准备就绪
示例-
创建代理作业示例 .NET 代理作业
az containerapp job create --name dotnet-agent-job --resource-group arkorg --environment arkoContainerEnv --image arkoacr.azurecr.io/dotnet-agent:v1 --cpu 0.5 --memory 1.0Gi --registry-identity system --registry-server arkoacr.azurecr.io --tags stack=dotnet --trigger-type manual
由于这是针对需要按需启动的 DevOps 代理作业,因此我使用手动触发,根据您的场景/要求,您也可以将其修改为事件或时间表。
以同样的方式,您可以为其他 Node.js / python / 等代理作业创建
为了确保您的管道在正确的容器(代理)上运行,您可以根据技术堆栈(例如 dotnet、nodejs、python 等)向代理添加标签
因此,对于 dotnet 或 Nodejs,您的标签应该如下所示
trigger:
- main
jobs:
- job: DotNetJob
displayName: Build with .NET Agent
pool:
name: Default
demands:
- stack -equals dotnet
steps:
- script: |
echo "Building .NET Application"
dotnet build MyApp.sln
displayName: 'Build .NET App'
- job: NodeJsJob
displayName: Build with Node.js Agent
pool:
name: Default
demands:
- stack -equals nodejs
steps:
- script: |
echo "Building Node.js Application"
npm install
npm run build
displayName: 'Build Node.js App'
为了更清楚地了解pool.demands 定义 | Microsoft Learn、SO 线程 和 配置需求 - 托管 DevOps 池预览 |微软学习