How to load PowerShell Module from custom script on vNext build agent?

前端 未结 2 480
别那么骄傲
别那么骄傲 2020-12-20 03:33

I am using the standard TFS vNext build step to execute a PowerShell script. Inside the script I am trying to take advantage of some of the functions within the standard TFS

相关标签:
2条回答
  • 2020-12-20 03:57

    Is it not possible to use the Modules from 'normal' PowerShell scripts and not only from PowerShell scripts registered as an actual build step?

    It is possible to have a powershell script in build step reference a module. I prefer to use the inline powershell task as it means I dont have to go through the rigmarole of gated checkin just to change the way the code is packaged. I use it quite often to do things like...

    • download a common assembly versioning ps1 script from a shared project in TFVC and execute it to stamp assemblies, nuget packages, etc with the build number.
    • change the build number
    • Save-Module for a module in a private PS repository, and include it in an artifact (install helpers)
    • Save-Module again to a temp folder, then import the module and use it to do something to the code being built.
    • Generate release notes or similar docs

    ... but you can use the regular "Run a powershell script" to do all these too.

    Perhaps simpler though is to put the module in the path and update powershell if its < 5.1, If you have powershell 3 or later on the build server, and the module is already installed on the server and in the agent account's $PSModulePath, then you dont even need to Import -Module, you can invoke the commands in that module directly.

    0 讨论(0)
  • 2020-12-20 04:09

    Try to specify build agent’s module path, such as:

     # 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
    
    0 讨论(0)
提交回复
热议问题