我在mac上安装了VSTS构建代理来构建xamarin iOS项目。构建工作正常,直到我添加了PowerShell构建步骤。 即使我为mac(https://github.com/PowerShell/PowerShell)安装了powershell并重新安装了代理,VSTS也抱怨它没有能够运行构建的代理。
找不到具有以下功能的代理: DotNetFramework,Xamarin.iOS,npm
当我禁用构建步骤时,构建工作正常。
是否可以在Mac上运行PowerShell构建步骤?
答案 0 :(得分:4)
正如MrHinsh澄清的那样,PowerShell任务无法在Mac上使用。
作为一种解决方法,我使用了ShellScript任务:
使用以下bash脚本:
#!/bin/bash
powershell ./SetAppVersion.ps1
此外,powershell安装程序似乎没有将powershell添加到我的PATH中,所以我不得不添加它:
$ export PATH=$PATH:/usr/local/microsoft/powershell/6.0.0-alpha.16
答案 1 :(得分:1)
如果您确定安装了DotNetFramework,那么您可以转到代理队列设置并为其添加一个自定义功能。
这应该允许它运行但是如果代理实际上找不到它们可能会失败,但它也可能成功,所以它可能值得一试。
答案 2 :(得分:1)
不,您无法在Mac上使用PowerShell任务,只支持节点任务。
目前在PowerShell3中编写的PowerShell任务,Mac上不支持。您可以请求团队在http://visualstudio.uservoice.com
上实施此功能答案 3 :(得分:1)
在TFS构建中,转到Agents Queues => Capablilities =>添加名为 DotNetFramework 的变量,并为mac agent的dotnet框架路径赋予值。
答案 4 :(得分:0)
这是accepted answer的后续行动,以解决我在评论中提出的问题。
感谢spatialguy发布并找到解决此问题的简单方法。我遇到了与KeithA45相同的问题:
问题:如果你想做同样的事情,还要将参数传递给Bash脚本,并将它们传递给Powershell脚本怎么办?
我找到了一个解决方案,首先,我修改了shell脚本任务,以包含我想传递给powershell脚本的Visual Studio Team Services(VSTS)环境变量。
接下来,我通过稍微修改accepted answer提到的shell脚本,将参数传递给被调用的powershell脚本。
#!/bin/bash
powershell ./Version.ps1 $1 $2
最后,在powershell脚本中,我使用这样的param来捕获已经传递的参数:
param([string]$version, [string]$path)
其中我现在可以使用包含在VSTS中输入的原始参数的变量$ version和$ path来满足我的powershell脚本的需要。
答案 5 :(得分:0)
事情似乎已经向前发展,因为今天我从Azure DevOps构建管道成功运行了Mac自托管代理上的PowerShell@2
任务。
通过在对构建进行排队时检查“启用系统诊断”,该日志向我显示该任务找到了自己在Homebrew(brew cask install powershell
的帮助下在Mac上安装的PowerShell Core(pwsh)的路径。 -参见https://docs.microsoft.com/fr-fr/powershell/scripting/install/installing-powershell-core-on-macos)。