由于第1行上的术语未识别错误,TFS 2017构建执行Powershell失败

时间:2019-05-31 15:45:32

标签: powershell tfs azure-pipelines tfs2017

我对TFS还是很陌生,我仍在学习如何使用它(因此希望这不仅仅是我的愚蠢疏忽)。我今年夏天在一个季节性的开发人员职位上实习,本质上,我的最终目标是自动化公司网站的负载测试。我正在使用TFS实现此目标;我目前拥有的构建现在只有两项任务:一项启动控制器和测试环境,另一项停止它们。我的问题是,由于第1行出现“无法识别的术语”错误,尤其是由似乎无法识别的默认工作文件夹所引起的,因此该构建在真正开始之前就一直失败。

以下是相关的日志文件:

2019-05-30T20:00:02.0942883Z Executing the following powershell script. (workingFolder = D:\RM_agent\_work\11\s)
2019-05-30T20:00:02.0942883Z D:\RM_agent\_work\11\s 
2019-05-30T20:00:02.4999117Z ##[error]. : The term 'D:\RM_agent\_work\11\s' is not recognized as the name of a 
2019-05-30T20:00:02.4999117Z ##[error]cmdlet, function, script file, or operable program. Check the spelling of the 
2019-05-30T20:00:02.4999117Z ##[error]name, or if a path was included, verify that the path is correct and try again.
2019-05-30T20:00:02.4999117Z ##[error]At line:1 char:3
2019-05-30T20:00:02.4999117Z ##[error]+ . 'D:\RM_agent\_work\11\s'
2019-05-30T20:00:02.4999117Z ##[error]+   ~~~~~~~~~~~~~~~~~~~~~~~~
2019-05-30T20:00:02.4999117Z ##[error]    + CategoryInfo          : ObjectNotFound: (D:\RM_agent\_work\11\s:String)  
2019-05-30T20:00:02.4999117Z ##[error]   [], CommandNotFoundException
2019-05-30T20:00:02.4999117Z ##[error]    + FullyQualifiedErrorId : CommandNotFoundException

我知道工作文件夹默认为$(Build.SourcesDirectory),所以我假设D:\RM_agent\_work\11\s$(Build.SourcesDirectory)的计算结果。 RM_agent显然是一个代理,因此/_work/11/s应该是存储源代码的本地路径。为什么它无法识别?

我尝试通过tfs手动将脚本的工作文件夹设置为存储内部版本的文件夹,但是内部版本仍然失败,日志仍然显示workingFolder = D:\RM_agent\_work\11\s

enter image description here

此外,构建失败的代码行Executing the following powershell script. (workingFolder = D:\RM_agent\_work\11\s)在我尝试执行的脚本中没有位置,这使我感到困惑。该脚本来自哪里?

(如果它不符合指导原则/不在主题之列,我可以删除它,但是如果有人可以将我引向有关tfs和/或负载测试的任何资源,那也将大有帮助)

编辑:这是第一个任务的Powershell脚本

########################################
# start environment
########################################

# import modules
Import-Module '\\neenah-san1\TSbuild\Deployment\Tools\PowerShell\Azure\JJK.TS.Azure.psm1' -Force -Prefix 'TS'

# provide azure credentials
$credential = Get-Credential

# login to azure subscription
Login-AzureRmAccount -Credential $credential

# start the controller
Get-AzureRmVM -ResourceGroupName 'TS-LoadTest-TST' | Where-Object {$_.Name -match 'vstc'} | Start-TSAzureVM -Credential $credential

# wait for controller to fully start
Start-Sleep -Seconds 120

# start the agents
Get-AzureRmVM -ResourceGroupName 'TS-LoadTest-TST' | Where-Object {$_.Name -match 'vsta'} | Start-TSAzureVM -Credential $credential

# check status of all servers
Get-AzureRmVM -ResourceGroupName 'TS-LoadTest-TST' -Status | Sort-Object -Property Name | Select-Object -Property Name, PowerState | Format-Table -AutoSize

解决方案结构: enter image description here

编辑2:[已解决]现已全部解决,谢谢!我进入了存储库,将脚本所在的文件夹直接映射到$(build.sourcesDirectory)。因此,我能够将文件路径更改为$(build.sourcesDirectory)\StartControllerAndAgents.ps1,并且该构建现在可以找到要运行的文件。

1 个答案:

答案 0 :(得分:0)

您需要将脚本的路径指定为$(Build.SourcesDirectory)\Path\To\Script。不是您现在$/Project/Path/To/Script配置的TFVC路径。

确切的路径取决于构建定义的工作空间映射。

工作目录也是如此。

Azure Pipelines(TFS / Azure DevOps中的“构建中心”的当前名称)中有许多变量可以解析为代理上的不同标准化路径。几乎所有任务都没有这些变量的相对路径。