【问题标题】:Force PowerShell Execution in a Build Task在构建任务中强制执行 PowerShell
【发布时间】:2015-11-30 20:26:09
【问题描述】:

我在 Visual Studio Team Services 中有一个构建配置,它一直运行良好,直到今天它莫名其妙地开始使用节点执行步骤而不是 PowerShell 步骤。构建代理在 Windows 机器上运行,因此根据我的知识,它不应该使用 Node 路由。

谁能提供对此的见解?其中一项任务就是 NPM 和 NPM 安装任务。

第一行通常是:

2015-11-30T17:57:28.3209069Z Executing the powershell script: C:\agent-internal\tasks\NpmInstall\0.1.3\NpmInstall.ps1

它已经切换到:

2015-11-30T19:36:08.2543618Z Set workingFolder to default: C:\agent-internal\tasks\Npm\0.2.0

这会导致连锁错误效应。有任何想法吗?如果我可以强制执行 PowerShell 脚本,我想我会很好。

【问题讨论】:

  • 您使用托管代理还是您自己的代理?我刚刚测试了一个构建配置,在我的情况下,它仍然运行 npm 任务的 PowerShell 脚本(也在版本 0.2.0)。
  • 您也可以尝试在vso-agent-tasks 存储库中添加问题。那里应该有人可以帮助您。
  • 这是我自己的经纪人。我没有理由认为它正在运行跨平台代理。我会试试 vso-agent-tasks 存储库。
  • 我刚刚重新启动了我们的构建代理服务,在将代理更新到 1.91.1 之后,它现在还运行节点脚本而不是 PowerShell 脚本,但仍然没有错误。您收到什么错误消息?

标签: azure-devops tfsbuild azure-pipelines azure-pipelines-build-task


【解决方案1】:

简而言之:Node 处理程序可以在 Windows 上正常运行。该任务已更新为跨平台兼容。

每个构建任务都可以附带同一任务的多个实现。有许多处理程序:

  • powershell - 现已弃用(从代理 2.0 开始)的 powershell 处理程序,它使用在特殊的 powershell 主机内运行 powershell 脚本。
  • powershell3 - 新的 powershell 处理程序,它使用一个特殊的模块与代理交互,允许脚本也在代理之外运行(便于调试)
  • javascript - 现已弃用的跨平台处理程序,在节点内运行 javascript
  • node - 新的 javascript 处理程序,它使用 vsts-node-lib 以与 powershell3 处理程序相同的方式与代理通信。这在节点 5 或节点 6 LTS 中。
    • node10 - 与节点处理程序相同的基础架构,但它在自 2018 年 11 月以来与代理一起提供的节点 10 版本中运行。

task.json 中的执行部分定义了运行哪个实现。 Windows 上的代理支持 powershell、powershell3 和 node,它支持 Node runner,然后是 powershell3,然后是 powershell,除非there is a specific "platforms" section that gives precedence to a specific handler

当构建代理更新自身以及将新版本的任务发布到 VSTS 的 Marketplace 时,任务作者可以选择包含节点实现,从而使任务跨平台。大多数任务作者会更愿意在所有平台上使用该一种实现,以确保功能奇偶性并防止仅在调用特定处理程序时出现的问题。出于向后兼容的原因,任务作者也倾向于发布旧的实现。在我自己的情况下,当使用旧实现时,我已经开始记录构建警告。

【讨论】:

    猜你喜欢
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2015-08-31
    • 2015-12-04
    • 1970-01-01
    • 2017-04-14
    • 2011-09-21
    相关资源
    最近更新 更多