Я пытаюсь отключить конвейер сборки в Azure DevOps с помощью Powershell, но получаю сообщение об ошибке.
Скрипт:
$project = "<Project-Name>"
$organization = "<Org-Name>"
$pat = "<PAT>"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($pat)"))
$headers = @{
Authorization = "Basic $base64AuthInfo"
"Content-Type" = "application/json"
}
$pipelineDetailsUrl = "https://dev.azure.com/$organization/$project/_apis/pipelines/<ID>?api-version=6.0"
$pipelineDetails = Invoke-RestMethod -Uri $pipelineDetailsUrl -Method Get -Headers $headers
$pipelineDetails.configuration.designerJson.queueStatus = "disabled"
$body = $pipelineDetails | ConvertTo-Json -Depth 10
Invoke-RestMethod -Uri $pipelineDetailsUrl -Method Put -Headers $headers -Body $body -ContentType "application/json"
Однако я получаю ошибку ниже
Invoke-RestMethod : {"count":1,"value":{"Message":"Запрошенный ресурс не поддерживает http-метод 'PUT'."}}
В сообщении об ошибке говорится, что API REST Azure DevOps не поддерживает метод HTTP PUT для используемой вами конечной точки. Чтобы отключить конвейер сборки, необходимо использовать правильную конечную точку и метод, поддерживаемые API Azure DevOps. Так:
$project = "<Project-Name>"
$organization = "<Org-Name>"
$pipelineId = "<Pipeline-ID>" # Update with the actual pipeline ID
$pat = "<PAT>"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($pat)"))
$headers = @{
Authorization = "Basic $base64AuthInfo"
"Content-Type" = "application/json"
}
# Get the pipeline details
$pipelineDetailsUrl = "https://dev.azure.com/$organization/$project/_apis/pipelines/$pipelineId?api-version=6.0-preview.1"
$pipelineDetails = Invoke-RestMethod -Uri $pipelineDetailsUrl -Method Get -Headers $headers
# Set the pipeline to disabled
$pipelineDetails.configuration = $pipelineDetails.configuration | ForEach-Object {
$_.enabled = $false
$_
}
$body = $pipelineDetails | ConvertTo-Json -Depth 10
# Update the pipeline with the new configuration
$updatePipelineUrl = "https://dev.azure.com/$organization/$project/_apis/pipelines/$pipelineId?api-version=6.0-preview.1"
Invoke-RestMethod -Uri $updatePipelineUrl -Method Put -Headers $headers -Body $body -ContentType "application/json"
Сценарий сначала получает сведения о конвейере с помощью запроса GET. Затем он изменяет свойство Enabled конфигурации конвейера на false. Наконец, он отправляет запрос PUT с обновленными сведениями о конвейере, чтобы отключить конвейер.
Привет, Стина, приведенное выше не сработало, выдавая ошибку. Настройка исключения «включена»: «Свойство «включено» не найдено в этом объекте. Убедитесь, что свойство существует и может быть установлено».
Обновлять
Нашел проблему, я пытался достичь конечной точки, а не
"https://dev.azure.com/$organization/$project/_apis/pipelines/<ID>?api-version=6.0"
использовать
"https://dev.azure.com/$organization/$project/_apis/build/definitions/<ID>?api-version=6.0"
Является ли конечная точка единственным, что вы изменили в сценарии, который вы опубликовали выше?
Да, изменение конечной точки решило мою проблему, атрибут был тот же «статус очереди».
Правильными конечными точками являются следующие:
$PROJECT = "my-project"
$ORGANIZATION = "https://dev.azure.com/my-organization"
$TOKEN = "xxxxxxxxxxxxxxxxxxxxxx"
$BUILD_DEFINITION_ID = "123"
# Base64-encode the Personal Access Token (PAT)
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($TOKEN)"))
# Same URL for getting the build definition and updating it
$apiUrl = "{0}/{1}/_apis/build/definitions/{2}?api-version=7.2-preview.7" -f $ORGANIZATION, $PROJECT, $BUILD_DEFINITION_ID
Write-Host "Endpoint: $apiUrl"
$headers = @{
Authorization=("Basic {0}" -f $base64AuthInfo)
Accept = "application/json"
"Content-Type" = "application/json"
}
$definition = Invoke-RestMethod -Uri $apiUrl -Headers $headers -Method GET
# $definition.queueStatus = "enabled"
# $definition.queueStatus = "paused"
$definition.queueStatus = "disabled"
$body = $definition | ConvertTo-Json
$response = Invoke-RestMethod -Uri $apiUrl -Headers $headers -Method PUT -Body $body
Write-Host $response
Хороший день для тебя. Казалось, что в ответе Руи использовалась та же конечная точка API обновления определений, что и в вашем ответе. Будем считать, что проблема в этом посте решена? Спасибо, что нашли время поделиться новостями. Ваше здоровье.