Проблемы с репозиториями 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)
Спасибо
1 ответ
Я заметил, что вы отправили свой пакет nuget в Azure Artifacts.
Вы можете добавить задачи Powershell в конвейер и запустить следующие сценарии:
Регистр-PS Репозиторий:
$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
Для получения более подробной информации вы можете обратиться к этому Руководству.