Проблемы с репозиториями PowerShell на агентах Azure DevOps

Извините за очень длинный пост, но я действительно застрял и надеюсь, что кто-то может помочь. Я так много раз перебирался и сталкивался с множеством проблем со всем, что связано с репозиториями PowerShell и агентами Azure DevOps.

Конечная цель - установить последние версии некоторых модулей PowerShell как часть конвейера.

Я пишу различные модули PowerShell, упаковываю их как NuGets и отправляю в разные репозитории (артефакты Azure DevOps, SonaType Nexus OSS)

Затем мне нужно установить эти модули как часть других конвейеров. Поскольку в Azure DevOps нет встроенного способа обработки репозиториев PowerShell и модулей импорта, я написал сценарий, который принимает расположение, имя и учетные данные репозитория в качестве параметров, проверяет его регистрацию и устанавливает модуль. Когда я запускаю этот сценарий на ЛЮБОЙ машине, он отлично работает.Когда этот сценарий является задачей PowerShell на любом конвейере, он имеет различные сбои, всегда с командлетами из PackageManagement.

Я думал, что это потому, что агент запускает его с -NoProfile, но у меня это работает, когда я запускаю сценарий точно так, как его запускает агент - powershell.exe -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command. 'C: .....'

Я также попытался запустить задачу cmd и вызвать PowerShell для запуска скрипта, но получил те же результаты.

Проблемы, с которыми я сталкиваюсь:

  • Get-PSRepository НИЧЕГО не возвращает. Даже PSGallery

  • Когда я пытаюсь зарегистрировать репозиторий (используя Register-PSRepository или Register-PackageSource), он выдает ошибку: PackageManagement\Register-PackageSource : The property 'Values' cannot be found on this object. Verify that the property exists.

  • как часть моего скрипта я запускаю эти командлеты, чтобы убедиться, что все необходимые модули есть:

    $webclient=New-Object System.Net.WebClient; $webclient.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials; [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Install-PackageProvider -Name NuGet -RequiredVersion 2.8.5.208 -Force -Confirm:$false -Verbose; Install-Module PowerShellGet -RequiredVersion 2.2.4 -SkipPublisherCheck -Verbose -Force;

  • Другая возникающая ошибка:

PackageManagement\Get-PackageSource : Unable to find repository 'PSGallery'. Use Get-PSRepository to see all available repositories.

Я потратил на это часы. Как правильно установить модули PS из стороннего репозитория (на основе NuGet)

Спасибо


comment
Вы используете хостинг-агента или частного агента?   -  person Daniel Mann    schedule 26.07.2020
comment
@DanielMann частный агент. Бывает с агентами сборки и выпуска, разных версий   -  person Mickey Cohen    schedule 27.07.2020


Ответы (1)


Я заметил, что вы отправили свой пакет nuget в Azure Artifacts.

Вы можете добавить задачи Powershell в конвейер и запустить следующие сценарии:

Register-PSRepository:

 $patToken = "PAT" | ConvertTo-SecureString -AsPlainText -Force
    
 $credsAzureDevopsServices = New-Object System.Management.Automation.PSCredential("email address", $patToken)
    
 Register-PSRepository -Name "PowershellAzureDevopsServices" -SourceLocation "https://pkgs.dev.azure.com/<org_name>/<project_name>/_packaging/<feed_name>/nuget/v2" -PublishLocation "https://pkgs.dev.azure.com/<org_name>/<project_name>/_packaging/<feed_name>/nuget/v2" -InstallationPolicy Trusted -Credential $credsAzureDevopsServices

Тогда вы сможете успешно зарегистрироваться.

введите описание изображения здесь

введите описание изображения здесь

Примечание: я предлагаю вам создать a Project Scope feed. Или у вас могут возникнуть проблемы.

Затем вы можете запустить следующие сценарии для установки модуля.

Find-Module -Repository PowershellAzureDevopsServices

Install-Module -Name Get-Hello -Repository PowershellAzureDevopsServices

Для получения более подробной информации вы можете обратиться к этому Руководящий документ.

person Kevin Lu-MSFT    schedule 29.07.2020
comment
Я так и делаю, но проблема в регистрации репо. См. Мой исходный пост, ошибки связаны с более ранними этапами, Get-PSRepository, Register-PSRepository, Register-PackageSource - person Mickey Cohen; 01.08.2020
comment
Вы можете попробовать запустить сценарий: Register-PSRepository -Default. Затем вы можете проверить, можно ли восстановить PSGallery. См. Этот блог: spaghettidba .com / 2017/12/19 / - person Kevin Lu-MSFT; 03.08.2020
comment
Если PSGallery по-прежнему не может найти, эта проблема может быть связана с версией PowerShellGet. Проверьте этот билет: stackoverflow.com/a/62456701/13464420. Вы можете попробовать обновить PowershellGet до 2.2.4 или 2.2.4.1 - person Kevin Lu-MSFT; 06.08.2020