Powershell脚本作为可执行文件给出“错误”,在Bamboo中给出返回码-1

时间:2015-06-18 18:20:46

标签: powershell continuous-integration windows-server-2008-r2 bamboo

我有一些简单的PowerShell脚本,我用Bamboo制作了可执行文件,通过添加C:\build-scripts\bamboo-build-scripts\clear-directory.ps1之类的路径作为Bamboo中新容量的可执行文件的路径。

然而,几个脚本,即使是在构建过程中作为“脚本”进程正确执行的脚本,在以这种方式运行时,通过给出返回码-1会失败。以下是构建日志中的示例:

simple  18-Jun-2015 13:14:06    Failing task since return code of [C:\build-scripts\bamboo-build-scripts\update-checker.ps1 GeometryClassLibrary] was -1 while expected 0

多个PowerShell脚本会发生这种情况,并导致构建过程的其余部分失败。

这是一个示例PowerShell脚本,我通过将参数传递给目录来执行:

Remove-Item $args[0] -Force -Recurse
[io.directory]::CreateDirectory($args[0])

我是否需要添加到PowerShell脚本中以使其使用正确的代码退出?或者我没有在Bamboo中正确定义可执行文件?

2 个答案:

答案 0 :(得分:0)

您可以尝试以下几点:

执行政策

可能是脚本根本没有执行,可能是因为策略设置为不执行它们。尝试直接调用<body> <div> <ul id="menubar"> <li class="toggle selected">HTML</li> <li class="toggle">HTML</li> <li class="toggle">HTML</li> <li class="toggle selected" style="border-right:none;">HTML</li> </ul> </div> </body>

powershell.exe

see this answer for more switches

管道

由于退出代码出现问题,NSClient ++过去常常遇到调用PowerShell中写入的检查的问题。他们的解决方案看起来像这样:

powershell.exe -ExecutionPolicy Bypass -File C:\build-scripts\bamboo-build-scripts\clear-directory.ps1

也许这会提供更准确的代码。

答案 1 :(得分:0)

我建议对脚本进行一些更改,以便在运行Bamboo日志时提供更好的输出,以帮助缩小问题的范围。

放入一些简单的输出行,以便您了解powershell脚本的运行情况,以及它执行了多长时间

Write-Host "Running script blah"
Remove-Item $args[0] -Force -Recurse
Write-Host "Directories removed"
[io.directory]::CreateDirectory($args[0])
Write-Host "Directory $args[0] created"

第二,将所有内容包装在try catch中并编写所有异常

try {
Remove-Item $args[0] -Force -Recurse
[io.directory]::CreateDirectory($args[0])
{
catch {
Write-Host $_.Exception.GetType().FullName, $_.Exception.Message
}

就您的脚本而言,您没有发布如何从Bamboo调用它。我大部分都是内联脚本,但确实有一些我另存为.ps1并与存储库一起上载并使用参数调用。我不确定args [x]方法是否适用于提取args,但是我遵循的建议方法是声明参数。

param(
[string]$SomeString
)
Write-Host "Param value: $SomeString"

然后从Bamboo称呼它为

SomeScript.ps1 -SomeString %BAMBOO_SOME_VARIABLE%