Я пытаюсь создать самостоятельный пул Azure Devops из CLI с помощью powershell...
Предполагается, что целевой пул будет использоваться для уже подготовленного масштабируемого набора виртуальных машин.
Пытаюсь следовать документам здесь: https://learn.microsoft.com/en-us/rest/api/azure/devops/distributedtask/pools/add?view=azure-devops-rest-7.1
до сих пор у меня есть
$org = "myorg"
$pat = "MY_PAT"
$headers = @{
Authorization = "Basic " + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($pat)"))
}
$url = "https://dev.azure.com/$org/_apis/distributedtask/pools?api-version=7.1-preview.1"
$body = @{
autoProvision = $false
autoSize = $true
autoUpdate = $true
options = "elasticPool, singleUseAgents"
owner = @{
displayName = "My Name" # Example value, replace with your actual value
id = "MY_ID" # Example value, replace with your actual value
uniqueName = "[email protected]" # Example value, replace with your actual value
}
isHosted = $false
isLegacy = $false
pool = "myPool"
name = "NewAgentPool" # Example value, replace with your actual value
poolType = "automation" # Example value, replace with your actual value
scope = "my-scope" # of the form XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX
size = 1 # Example value, replace with your actual value
}
когда я запускаю его, я получаю ошибку
Invoke-RestMethod -Uri $url -Headers $headers -Method Post `
-Body ($body | ConvertTo-Json) `
-ContentType "application/json"
Invoke-RestMethod:
{
"$id": "1",
"innerException": null,
"message": "Value cannot be null.\r\nParameter name: pool",
"typeName": "System.ArgumentNullException, mscorlib",
"typeKey": "ArgumentNullException",
"errorCode": 0,
"eventId": 0
}
Керлинг с теми же аргументами показывает код состояния ответа 400.
Я не вижу упоминания о параметре «Пул» в документации, поэтому я немного не понимаю, куда идти дальше. Есть «poolType» и «name»... но нет «pool».
Редактировать:
после некоторой отладки с помощью Curl проходит простое тело json, подобное следующему, но не связывается ни с каким проектом, а только с организацией
{
"autoProvision": false,
"name": "myvmsspool5",
"poolType": "automation",
"options": "elasticPool"
}
когда я указываю "область", эта ошибка начинает появляться, не знаю, какое значение сейчас передать в "область"...
Редактировать 2: Кажется, API не предоставляет возможности настройки параметров пула
Я могу создать пул, но не могу назначить ему ни соединение службы, ни масштабируемый набор виртуальных машин через API.
Редактировать 4: Кажется, правильной абстракцией для настройки является «Эластичный пул», как описано здесь: https://registry.terraform.io/providers/microsoft/azuredevops/latest/docs/resources/elastic_pool
Затем мне нужно было прикрепить его к моему проекту с помощью объекта Agent_Queue.
🤔 А знаете ли вы, что...
PowerShell предоставляет доступ к средствам шифрования для обеспечения безопасности данных.
Учитывая требование по настройке собственного пула агентов VMSS, вместо этого нам следует использовать этот API. Для этой операции необходимо использовать подключение к службе Azure Resource Manager
для аутентификации доступа к ресурсу VMSS в подписке Azure.
Ниже приведен пример для справки, предполагающий, что вы создали ресурс ARM service connection
и VMSS в Azure. Обратите внимание, что $serviceEndpointId
— это идентификатор ресурса ARM service connection
, по которому мы аутентифицируем доступ к ресурсу VMSS в подписке Azure, а $serviceEndpointScope
обычно является идентификатором проекта , где генерируется подключение к службе ARM.
#Elasticpools - Create POST https://dev.azure.com/{organization}/_apis/distributedtask/pools?api-version=7.1-preview.1
$organization = "TheAzureDevOpsOrgName"
$MyPat = 'xxxxxx'
$B64Pat = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(":$MyPat"))
$poolName= "AZVMSSPool"
$serviceEndpointId = 'eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee' # The resource Id of the ARM service connection, against which we authenticate access to the VMSS resource in Azure subscription
$serviceEndpointScope = 'pppppppp-pppp-pppp-pppp-pppppppppppp' # Typically the Id of the project where the ARM service connection is generated
$azureSubId = "ssssssss-ssss-ssss-ssss-ssssssssssss"
$vmssResourceId = "/subscriptions/$azureSubId/resourceGroups/RG-AZVM-LINUX/providers/Microsoft.Compute/virtualMachineScaleSets/azvmss-ubuntu-22.04"
$URL = "https://dev.azure.com/$organization/_apis/distributedtask/elasticpools?poolName=$poolName&authorizeAllPipelines=true&autoProvisionProjectPools=true&api-version=7.1-preview.1"
$headers = @{
'Authorization' = 'Basic ' + $B64Pat
'Content-Type' = 'application/json'
}
$body = @{
agentInteractiveUI = $false
azureId = $vmssResourceId
desiredIdle = 0
maxCapacity = 1
osType = 1
maxSavedNodeCount = 0
recycleAfterEachUse = $false
serviceEndpointId = $serviceEndpointId
serviceEndpointScope = $serviceEndpointScope
timeToLiveMinutes = 30
} | ConvertTo-Json
$response = Invoke-RestMethod -Method Post -Uri $URL -Headers $headers -Body $body
$response | ConvertTo-Json -Depth 10
# Projects - List GET https://dev.azure.com/{organization}/_apis/projects?api-version=7.1-preview.4
$projectsURL = "https://dev.azure.com/$organization/_apis/projects?api-version=7.1-preview.4"
$projects = Invoke-RestMethod -Method Get -Uri $projectsURL -Headers $headers
$projects | ConvertTo-Json -Depth 10
# Endpoints - Get GET https://dev.azure.com/{organization}/{project}/_apis/serviceendpoint/endpoints/{endpointId}?api-version=7.1-preview.4
$endpointURL = "https://dev.azure.com/$organization/$project/_apis/serviceendpoint/endpoints/$serviceEndpointId?api-version=7.1-preview.4"
$endpoint = Invoke-RestMethod -Method Get -Uri $endpointURL -Headers $headers
$endpoint | ConvertTo-Json -Depth 10