Как загрузить модуль PowerShell из пользовательского скрипта в агенте сборки vNext?

Я использую стандартный шаг сборки TFS vNext для выполнения сценария PowerShell. Внутри сценария я пытаюсь воспользоваться некоторыми функциями стандартных модулей агента TFS.

Перечислено здесь: http://blog.majcica.com/2015/11/14/available-modules-for-tfs-2015-build-tasks/

Я видел следующие две строки во многих сценариях PowerShell, найденных на этапах сборки:

Import-Module "Microsoft.TeamFoundation.DistributedTask.Task.Internal"
Import-Module "Microsoft.TeamFoundation.DistributedTask.Task.Common"

Я пытался использовать те же строки в своем скрипте, однако получаю сообщение об ошибке:

VERBOSE: Loading module from path 
'C:\TFS2015-Agent\Agent1\agent\agent\worker\Modules\Microsoft.TeamFoundation.DistributedTask.Task.Common\Microsoft.TeamFoundation.DistributedTask.Task.Common.dll'.
Import-Module : Could not load file or assembly 'Microsoft.TeamFoundation.DistributedTask.Agent.Interfaces, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. 
The system cannot find the file specified.
At C:\tfsVnBw1\3\s\Configuration\BuildScripts\CommonFunctions.ps1:25 char:5
+ Import-Module "Microsoft.TeamFoundation.DistributedTask.Task.Common" - Error ... + CategoryInfo : NotSpecified: (:) [Import-Module], FileNotFoundException + FullyQualifiedErrorId : System.IO.FileNotFoundException,Microsoft.PowerShell.Commands.ImportModuleCommand

Если я пытаюсь не импортировать, он пишет что-то вроде:

The 'Find-Files' command was found in the module 'Microsoft.TeamFoundation.DistributedTask.Task.Common', 
but the module could not be loaded. For more information, run 'Import-Module Microsoft.TeamFoundation.DistributedTask.Task.Common'. 
At C:\tfsVnBw1\3\s\Configuration\BuildScripts\CommonFunctions.ps1:71 char:16
+ $files = @(FindFiles $filePattern)
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Find-Files:String) [FindFiles], CommandNotFoundException + FullyQualifiedErrorId : CouldNotAutoloadMatchingModule

Нельзя ли использовать модули из «обычных» сценариев PowerShell, а не только из сценариев PowerShell, зарегистрированных как фактический шаг сборки?


person dynamokaj    schedule 09.09.2016    source источник


Ответы (2)


Попробуйте указать путь к модулю агента сборки, например:

 # Import the Task.Common and Task.Internal dll that has all the cmdlets we need for Build
$agentWorkerModulesPathRoot = "$($env:AGENT_HOMEDIRECTORY)\agent\worker"
$agentDistributedTaskInterfacesModulePath = "$agentWorkerModulesPathRoot\Microsoft.TeamFoundation.DistributedTask.Agent.Interfaces.dll"
$agentWorkerModulesPath = "$($env:AGENT_HOMEDIRECTORY)\agent\worker\Modules"
$agentDistributedTaskCommonModulePath = "$agentWorkerModulesPath\Microsoft.TeamFoundation.DistributedTask.Task.Common\Microsoft.TeamFoundation.DistributedTask.Task.Common.dll"

Write-Host "Importing VSTS Module $agentDistributedTaskInterfacesModulePath"
Import-Module $agentDistributedTaskInterfacesModulePath
Write-Host "Importing VSTS Module $agentDistributedTaskCommonModulePath"
Import-Module $agentDistributedTaskCommonModulePath
person Cece Dong - MSFT    schedule 09.09.2016
comment
Спасибо, я на самом деле смотрю на это прямо сейчас с этого сайта: brandonmartinez.com/2015/12/11/ — сообщит вам, если это сработает. - person dynamokaj; 09.09.2016
comment
@Mardoxx - Можете ли вы сказать, какая часть? - person StingyJack; 05.11.2018

Нельзя ли использовать модули из «обычных» сценариев PowerShell, а не только из сценариев PowerShell, зарегистрированных как фактический шаг сборки?

На шаге сборки можно указать ссылку на модуль с помощью сценария powershell. Я предпочитаю использовать встроенную задачу powershell поскольку это означает, что мне не нужно проходить через галиматью закрытой регистрации только для того, чтобы изменить способ упаковки кода. Я использую его довольно часто, чтобы делать такие вещи, как...

  • загрузите общий скрипт ps1 для управления версиями сборок из общего проекта в TFVC и выполните его, чтобы пометить сборки, пакеты nuget и т. д. номером сборки.
  • изменить номер сборки
  • Save-Module для модуля в приватном репозитории PS и включить его в артефакт (помощники по установке)
  • Save-Module снова во временную папку, затем импортируйте модуль и используйте его, чтобы что-то сделать с создаваемым кодом.
  • Создавайте примечания к выпуску или аналогичные документы

... но вы также можете использовать обычный «Запустить скрипт powershell», чтобы сделать все это.

Возможно, проще поместить модуль в путь и обновить powershell, если он ‹ 5.1. Если у вас есть powershell 3 или более поздняя версия на сервере сборки, и модуль уже установлен на сервере и в учетной записи агента $PSModulePath, тогда вы не даже нужно Import -Module, вы можете напрямую вызывать команды в этом модуле.

person StingyJack    schedule 05.11.2018