Как установить расширение Azure Devops из сценария PowerShell

Я не могу хоть убей понять, чего этот API не хочет от меня! Я сделал запрос, чтобы получить идентификатор расширения и идентификатор издателя из командной строки. Я подключаюсь с помощью своего tenantId, потому что PAT администратора недостаточно. Теперь он не может его найти?

function azLogin {
    param ( [string]$organization, [string]$tenant)

    az login --tenant $tenant
}


[string]$tenant = $args[0]
[string]$organization = $args[1]
[string]$extension = $args[2]
[string]$publisher = $args[3]

try {
    azLogin $organization $tenant

    $result = az devops extension search --search-query Timetracker | ConvertFrom-Json
    $extensionId = $result.extensionId
    $publisherId = $result.publisher.publisherId
    
    Write-Host $publisherId
    az devops extension install --extension-id $extensionId --publisher-id $publisherId

    if ($result.PSObject.Properties.Name -notcontains 'extensionId' -or $result.PSObject.Properties.Name -notcontains 'publisherId') {
        throw
    }
}
catch {
   Write-Error "##[ERROR] failed."
}

На этом этапе предполагается установить эту организацию, но я получаю:

The requested extension 'ecbf0d3e-ca03-4972-88ad-edcd1cb4a69c.83b3c590-5cd3-495b-b401-b8b4ed6da230' doesn't exist.

Как мне установить расширение в своей организации, используя только PowerShell и pat?

Вы пробовали «az devops login » вместо « az login»?

Bright Ran-MSFT 27.03.2024 02:49

Да и команда даже не запускалась.

Takadox et compagnie 27.03.2024 12:12
Как установить 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
2
171
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В сценарии PowerShell вы не указываете организацию Azure DevOps, в которой установлено расширение. вы можете попытаться указать организацию, чтобы узнать, можно ли решить проблему.

Чтобы указать организацию Azure DevOps, вы можете попробовать один из следующих методов:

  1. Настройте организацию по умолчанию после команды «az login».

    az login xxxx
    az devops configure --defaults organization=https://dev.azure.com/xxxx
    
  2. Если вы используете команду «az login», но не установили организацию по умолчанию, вам необходимо указать организацию при вызове команды «az devops extension install».

    az devops extension install --extension-id xxxx --publisher-id xxxx --org https://dev.azure.com/xxxx
    
  3. Войдите напрямую, используя «az devops login».

    az devops login --org https://dev.azure.com/xxxx
    

Я все еще получаю ту же ошибку, но спасибо за совет.

Takadox et compagnie 27.03.2024 16:01
Ответ принят как подходящий

Использование rest API Azure Devops Service может упростить задачу, если вы используете PAT, СПРАВКА ПО API

В примере ниже показано, как установить расширение Azure Devops SonarQube (вы можете выбрать любое расширение по вашему желанию), просто скопируйте и замените свое собственное userName, PAT, orgName.

function Get-AuthHeaders {
    [CmdletBinding()]
    param (
        [Parameter()]
        [string]$UserName,
        [string]$PersonalAccessToken
    )

    $basicAuth = ("{0}:{1}" -f $UserName, $PersonalAccessToken)
    $basicAuth = [System.Text.Encoding]::UTF8.GetBytes($basicAuth)
    $basicAuth = [System.Convert]::ToBase64String($basicAuth)
    $headers = @{Authorization = ("Basic {0}" -f $basicAuth) }
    return $headers
}
function Install-AdoExtension {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory)]
        [string]$OrganizationName,
        [Parameter(Mandatory)]
        [string]$PublisherName,
        [Parameter(Mandatory)]
        [string]$ExtensionName,
        [Parameter(Mandatory)]
        [string]$Version,
        [Parameter(Mandatory)]
        [hashtable]$Headers
    )

    $uri = "https://extmgmt.dev.azure.com/{0}/_apis/extensionmanagement/installedextensionsbyname/{1}/{2}/{3}?api-version=7.2-preview.1" -f $OrganizationName, $PublisherName, $ExtensionName, $Version


    $response = Invoke-RestMethod -Uri $uri -Method 'Post' -ContentType 'application/json' -Headers $headers -Body $body

    return $response
}
function List-AdoExtension {

    [CmdletBinding()]
    param (
        [Parameter(Mandatory)]
        [string]$OrganizationName,
        [Parameter(Mandatory)]
        [hashtable]$Headers
    )
    $uri = "https://extmgmt.dev.azure.com/{0}/_apis/extensionmanagement/installedextensions?api-version=7.2-preview.1" -f $OrganizationName
    $response = Invoke-RestMethod -Uri $uri -Method 'Get' -Headers $headers

    return $response
}

##
$userName            = "wbaccesstoken20250228"
$personalAccessToken = "xxxxxxx"
$orgName = "yourOrgName"

$extensionName = 'SonarQube'
$publisherName = 'SonarSource'
$version = '5.19.2'

###
$headers = Get-AuthHeaders -UserName $userName -PersonalAccessToken $personalAccessToken

Install-AdoExtension -OrganizationName $orgName -PublisherName $publisherName -ExtensionName $extensionName -Version $version -Headers $headers

List-AdoExtension -OrganizationName $orgName -Headers $headers

результат моего примера:

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