通过 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 "& 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 "" 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 "& Invoke-WebRequest -Uri https://nodejs.org/dist/v14.15.5/node-v14.15.5-x64.msi -OutFile C:\test\buildPrerequisites\nodejstest.msi "" 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 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章