Azure VM 规模集中的部署代理
Deployment Agents in Azure VM Scale Set
我目前正在使用 ARM 模板部署 VM 规模集 (VMSS),该模板在 VMSS 中有一个资源,用于为 Azure DevOps (ADO) 部署代理安装 Azure 扩展。一切都已成功部署,并且在 ADO 中注册了一个节点,其中包含 ARM 模板中的所有详细信息。但是问题是它只在第一个节点上安装代理并且(据我所知)忽略了其余节点。我在创建规模集期间使用多个节点测试了这一点,并使用自动缩放进行了测试。这两种情况都只导致第一个代理注册。
这是我正在使用的代码布局(我已经删除了 VMSS 位以减少此处的模板长度,当然还有 OS,里面有存储和网络设置):
{
"type": "Microsoft.Compute/virtualMachineScaleSets",
"name": "[parameters('VMSSName')]",
"apiVersion": "2018-10-01",
"location": "[resourceGroup().location]",
"sku": {
"name": "[parameters('VMSSSize')]",
"capacity": "[parameters('VMSSCount')]",
"tier": "Standard"
},
"dependsOn": [],
"properties": {
"overprovision": "[variables('overProvision')]",
"upgradePolicy": {
"mode": "Automatic"
},
"virtualMachineProfile": {},
"storageProfile": {},
"networkProfile": {},
"extensionProfile": {
"extensions": [
{
"type": "Microsoft.Compute/virtualMachineScaleSets/extensions",
"name": "VMSS-NetworkWatcher",
"location": "[resourceGroup().location]",
"properties": {
"publisher": "Microsoft.Azure.NetworkWatcher",
"type": "[if(equals(parameters('Platform'), 'Windows'), 'NetworkWatcherAgentWindows', 'NetworkWatcherAgentLinux')]",
"typeHandlerVersion": "1.4",
"autoUpgradeMinorVersion": true
}
},
{
"type": "Microsoft.Compute/virtualMachineScaleSets/extensions",
"name": "VMSS-TeamServicesAgent",
"location": "[resourceGroup().location]",
"properties": {
"publisher": "Microsoft.VisualStudio.Services",
"type": "[if(equals(parameters('Platform'), 'Windows'), 'TeamServicesAgent', 'TeamServicesAgentLinux')]",
"typeHandlerVersion": "1.0",
"autoUpgradeMinorVersion": true,
"settings": {
"VSTSAccountName": "[parameters('VSTSAccountName')]",
"TeamProject": "[parameters('VSTSTeamProjectName')]",
"DeploymentGroup": "[parameters('VSTSDeploymentGroupName')]",
"AgentName": "[concat(parameters('VMSSName'),'-DG')]",
"Tags": "[parameters('VSTSDeploymentAgentTags')]"
},
"protectedSettings": {
"PATToken": "[parameters('VSTSPATToken')]"
}
}
}
]
}
}
}
}
当然,现在期望的状态是所有节点都安装了代理,这样我就可以在发布管道中使用部署组。
您的问题在于所有代理都具有相同的 AgentName
,因此它有效地覆盖了代理并且仅覆盖了最新的代理 "survives"。我认为您无能为力,除非您修改 AgentName
并且它会根据计算机名称自动分配。
您可以将其转换为 script\dsc 扩展,这样您就可以即时计算所有内容。
我目前正在使用 ARM 模板部署 VM 规模集 (VMSS),该模板在 VMSS 中有一个资源,用于为 Azure DevOps (ADO) 部署代理安装 Azure 扩展。一切都已成功部署,并且在 ADO 中注册了一个节点,其中包含 ARM 模板中的所有详细信息。但是问题是它只在第一个节点上安装代理并且(据我所知)忽略了其余节点。我在创建规模集期间使用多个节点测试了这一点,并使用自动缩放进行了测试。这两种情况都只导致第一个代理注册。 这是我正在使用的代码布局(我已经删除了 VMSS 位以减少此处的模板长度,当然还有 OS,里面有存储和网络设置):
{
"type": "Microsoft.Compute/virtualMachineScaleSets",
"name": "[parameters('VMSSName')]",
"apiVersion": "2018-10-01",
"location": "[resourceGroup().location]",
"sku": {
"name": "[parameters('VMSSSize')]",
"capacity": "[parameters('VMSSCount')]",
"tier": "Standard"
},
"dependsOn": [],
"properties": {
"overprovision": "[variables('overProvision')]",
"upgradePolicy": {
"mode": "Automatic"
},
"virtualMachineProfile": {},
"storageProfile": {},
"networkProfile": {},
"extensionProfile": {
"extensions": [
{
"type": "Microsoft.Compute/virtualMachineScaleSets/extensions",
"name": "VMSS-NetworkWatcher",
"location": "[resourceGroup().location]",
"properties": {
"publisher": "Microsoft.Azure.NetworkWatcher",
"type": "[if(equals(parameters('Platform'), 'Windows'), 'NetworkWatcherAgentWindows', 'NetworkWatcherAgentLinux')]",
"typeHandlerVersion": "1.4",
"autoUpgradeMinorVersion": true
}
},
{
"type": "Microsoft.Compute/virtualMachineScaleSets/extensions",
"name": "VMSS-TeamServicesAgent",
"location": "[resourceGroup().location]",
"properties": {
"publisher": "Microsoft.VisualStudio.Services",
"type": "[if(equals(parameters('Platform'), 'Windows'), 'TeamServicesAgent', 'TeamServicesAgentLinux')]",
"typeHandlerVersion": "1.0",
"autoUpgradeMinorVersion": true,
"settings": {
"VSTSAccountName": "[parameters('VSTSAccountName')]",
"TeamProject": "[parameters('VSTSTeamProjectName')]",
"DeploymentGroup": "[parameters('VSTSDeploymentGroupName')]",
"AgentName": "[concat(parameters('VMSSName'),'-DG')]",
"Tags": "[parameters('VSTSDeploymentAgentTags')]"
},
"protectedSettings": {
"PATToken": "[parameters('VSTSPATToken')]"
}
}
}
]
}
}
}
}
当然,现在期望的状态是所有节点都安装了代理,这样我就可以在发布管道中使用部署组。
您的问题在于所有代理都具有相同的 AgentName
,因此它有效地覆盖了代理并且仅覆盖了最新的代理 "survives"。我认为您无能为力,除非您修改 AgentName
并且它会根据计算机名称自动分配。
您可以将其转换为 script\dsc 扩展,这样您就可以即时计算所有内容。