Возникает ошибка при попытке отключить конвейер Azure DevOps с помощью Powershell

Я пытаюсь отключить конвейер сборки в 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 обновления определений, что и в вашем ответе. Будем считать, что проблема в этом посте решена? Спасибо, что нашли время поделиться новостями. Ваше здоровье.

Alvin Zhao - MSFT 22.07.2024 04:14
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
1
82
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

В сообщении об ошибке говорится, что 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 с обновленными сведениями о конвейере, чтобы отключить конвейер.

Привет, Стина, приведенное выше не сработало, выдавая ошибку. Настройка исключения «включена»: «Свойство «включено» не найдено в этом объекте. Убедитесь, что свойство существует и может быть установлено».

Mudit Balooja 21.07.2024 12:43

Обновлять

Нашел проблему, я пытался достичь конечной точки, а не

"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"

Является ли конечная точка единственным, что вы изменили в сценарии, который вы опубликовали выше?

Rui Jarimba 22.07.2024 14:28

Да, изменение конечной точки решило мою проблему, атрибут был тот же «статус очереди».

Mudit Balooja 27.07.2024 09:16
Ответ принят как подходящий

Правильными конечными точками являются следующие:

Пример

$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

Другие вопросы по теме

Как просмотреть все видеофайлы (вид: видео) независимо от того, какое расширение имеют эти файлы (может быть .mkv/.mp4/.mov и т. д.)?
Как преобразовать вывод команды так, чтобы в powershell сохранялись только последние 1000 строк
Get-MgGroupMember по отображаемому имени вместо userID
Привести к сбою конвейера, если в журнале появляется определенное предложение. Найдите подстроку, но игнорируйте определенную подстроку
Родительская ссылка Azure DevOps REST API на существующую ошибку рабочего элемента
Сделать конвейер сбоем, если в журнале появляется определенное предложение
Извлечение имени и адреса электронной почты менеджеров пользователей AD в существующий сценарий
Неизвестное значение в пользовательском объекте PowerShell
Как использовать секреты в задаче сценария Azure DevOps Powershell
Считайте переменную из файла .ps1 и запустите сценарий .ps1 внутри Pipeline с помощью Git Repo