Как установить модуль powershell в контейнере docker из локального репозитория Azure Artifacts, используя PAT? - PullRequest
3 голосов
/ 07 января 2020

У меня следующая ситуация:

  1. On-prem Azure DevOps Server 2019.
  2. Внутренний модуль Powershell опубликован для Azure Артефактов в (1). * Контейнеру 1006 *
  3. A docker необходимо установить модуль из (2).

Я могу свернуть репозиторий NuGet Azure Artifacts изнутри контейнера:

PS C:\azp> $Uri
https://tfs.xyz.com/tfs/DefaultCollection/_packaging/xyz@Release/nuget/v2
PS C:\azp> $headers

Name                           Value
----                           -----
Authorization                  Basic ***


PS C:\azp> (curl $Uri -Headers $headers -UseBasicParsing).StatusCode
200

Но я не могу установить модуль из него:

PS C:\azp> $Name
xyz
PS C:\azp> $credential

UserName                     Password
--------                     --------
a        System.Security.SecureString


PS C:\azp> Register-PSRepository -Name $Name -SourceLocation $Uri -PublishLocation $Uri -InstallationPolicy Trusted -Credential $credential
PS C:\azp> $Params

Name                           Value
----                           -----
Name                           xyz.PS.Core
Force                          True
ErrorAction                    Stop


PS C:\azp> $RepoParam

Name                           Value
----                           -----
Repository                     xyz


PS C:\azp> Install-Module @Params @RepoParam -Scope CurrentUser -Credential $credential
WARNING: Cannot access 'https://tfs.xyz.com/tfs/DefaultCollection/_packaging/xyz@Release/nuget/v2'. Are you missing 'Credential' parameter in the cmdlet?
WARNING: Unable to resolve package source 'https://tfs.xyz.com/tfs/DefaultCollection/_packaging/xyz@Release/nuget/v2'.
PackageManagement\Install-Package : No match was found for the specified search criteria and module name 'xyz.PS.Core'. Try Get-PSRepository to see all available registered
module repositories.
At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:1809 char:21
+ ...          $null = PackageManagement\Install-Package @PSBoundParameters
+                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Microsoft.Power....InstallPackage:InstallPackage) [Install-Package], Exception
    + FullyQualifiedErrorId : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage

PS C:\azp>

Объект $credential содержит PAT в качестве пароля, но, поскольку я не смог указать пустое имя пользователя, вместо этого я даю 'a' , Но, похоже, это не имеет значения.

Итак, я не понимаю, как установить модуль Powershell из Azure Артефактов при запуске внутри контейнера. Возможно ли это вообще?

PS

Я использую Windows 10. Базовое изображение для интерактивного контейнера создается из этого файла docker:

FROM mcr.microsoft.com/windows/servercore:ltsc2019
COPY certificates certificates
WORKDIR /azp
COPY test.ps1 .
COPY Token.txt .token
CMD powershell .\test.ps1

Где test.ps1:

Get-ChildItem /certificates | ForEach-Object {
    $null = Import-Certificate -FilePath $_.FullName -CertStoreLocation Cert:\LocalMachine\Root
}

РЕДАКТИРОВАТЬ 1

PS C:\azp> Get-PSRepository

Name                      InstallationPolicy   SourceLocation
----                      ------------------   --------------
xyz                       Trusted              http://tfs.xyz.com:8080/tfs/DefaultCollection/_packaging/xyz@Release/nuget/v2
PSGallery                 Trusted              https://www.powershellgallery.com/api/v2


PS C:\azp> Get-PackageProvider

Name                     Version          DynamicOptions
----                     -------          --------------
msi                      3.0.0.0          AdditionalArguments
msu                      3.0.0.0
NuGet                    2.8.5.208        Destination, ExcludeVersion, Scope, SkipDependencies, Headers, FilterOnTag, Contains, AllowPrereleaseVersions, ConfigFile, SkipValidate
PowerShellGet            1.0.0.1          PackageManagementProvider, Type, Scope, AllowClobber, SkipPublisherCheck, InstallUpdate, NoPathUpdate, Filter, Tag, Includes, DscResou...
Programs                 3.0.0.0          IncludeWindowsInstaller, IncludeSystemComponent


PS C:\azp>

РЕДАКТИРОВАТЬ 2

Есть одна важная деталь, которую я забыл упомянуть - я хочу аутентифицироваться с использованием PAT.

Ответы [ 2 ]

0 голосов
/ 15 января 2020

Подтверждено как ошибка в Azure DevOps 2019 - https://developercommunity.visualstudio.com/comments/885584/view.html

0 голосов
/ 08 января 2020

Для 'Credential' отсутствует, эта ошибка указывает, что переданный вами параметр $ credential может быть неправильным.

Для параметра -Credential требуется PSCredential, как указано в Install-Module . Но из вывода размещенных вами учетных данных $ мы знаем, что это не частный объект.

Пожалуйста, попробуйте ниже скрипт, чтобы создать Pscredential .

$secpasswd = ConvertTo-SecureString "PAT" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential("username", $secpasswd)

Затем выполните команду Install-Module с pscredential $ mycreds

Install-Module @Params @RepoParam -Scope CurrentUser -Credential $mycreds

Убедитесь, что PAT действителен и имеет разрешение Packaging: Read, write & management. Вы также можете проверить подробный пример здесь .

enter image description here

...