通过 tfs buildagent 启动时,bitsadmin 无法正常工作

Posted

技术标签:

【中文标题】通过 tfs buildagent 启动时,bitsadmin 无法正常工作【英文标题】:bitsadmin not working when started via tfs buildagent 【发布时间】:2021-05-24 11:17:22 【问题描述】:

我是脚本新手,但我有一个无法解决的问题。

我正在编写一个用于下载一些安装文件的 powershell 脚本。 (exe, msi, zip)

它将从一个 msbuild 项目启动,由 tfs 中的 buildagent 执行。问题是,它不会开始下载。我使用了以下命令:

bitsadmin /transfer nodetest /download /dynamic /priority FOREGROUND "https://nodejs.org/dist/v14.15.5/node-v14.15.5-x64.msi" "C:\temp\buildPrerequisites\nodejstest.msi"

当我连接到 buildagent 并从 powershell 窗口使用命令时,它将按预期工作。我还确保脚本可以从 msbuild 文件正确执行。builduser 具有管理权限。

有人有想法吗?

提前致谢

【问题讨论】:

嗨,您有机会查看以下答案吗?如果它帮助您解决此问题,请告诉我 【参考方案1】:

我在我的 .csproj 文件中添加了以下内容,并在我的管道中使用 msbuild 任务进行构建。对我来说效果很好。

<Target Name="download" BeforeTargets="BeforeBuild">
   <Exec Command="C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NonInteractive -executionpolicy Unrestricted -command &quot;&amp;  bitsadmin /transfer nodetest /download /dynamic /priority FOREGROUND https://nodejs.org/dist/v14.15.5/node-v14.15.5-x64.msi C:\temp\buildPrerequisites\nodejstest.msi  &quot;" LogStandardErrorAsError="true" ContinueOnError="false" />
</Target>

在您构建项目时,目标download 将自动执行。因为它添加了BeforeTargets 依赖到目标BeforeBuild

如果您在检查构建日志时发现目标未执行。这可能是因为您没有为download 目标设置依赖目标。如下:

<Target Name="download" >
 ..
</Target>

然后您需要确保正确配置 msbuild 任务以运行 download 目标

- task: MSBuild@1
  displayName: 'Build'
  inputs:
    solution: **/myProject.csproj
    msbuildArguments: /t:download

更新:

您也可以使用Invoke-WebRequest。见下文:

<Exec Command="C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NonInteractive -executionpolicy Unrestricted -command &quot;&amp;  Invoke-WebRequest -Uri https://nodejs.org/dist/v14.15.5/node-v14.15.5-x64.msi -OutFile C:\test\buildPrerequisites\nodejstest.msi  &quot;" LogStandardErrorAsError="true" ContinueOnError="false" />

【讨论】:

感谢您的回答!可悲的是,这对我不起作用。执行包含 bitsadmin 命令的脚本,我通过让它创建虚拟文本文件对其进行了测试。那些被创造出来。日志告诉我以下内容:“术语 'C:\Windows\system32\bitsadmin.exe' 未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试”路径正确。我也试过没有完整路径,并确保系统环境变量设置正确 @Jensson 这很奇怪。您可以尝试改用Invoke-WebRequest。见上面的更新 我发现了导致问题的错误。 msbuild 作为 32 位进程运行,而 32 位 shell 不能使用 bitsadmin。尽管有 64 位 exe 的完整路径,但 shell 以 32 位运行。

以上是关于通过 tfs buildagent 启动时,bitsadmin 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

搭建TFS 2015 Build Agent环境

为 VS2003 安装 TFS

禁止Visual Studio启动时自动连接TFS服务器

BuildActivity 忽略 ToolsVersion

升级到 TFS 2017.3 后,门户网站签入不会启动封闭签入构建

在 TFS 2013 中启动回滚后,我可以恢复我最近的本地更改吗?