内联脚本任务Powershell /批处理在Bamboo部署项目中出现错误或异常时不会使部署项目失败。

3
我正在使用以下脚本连接到远程服务器并关闭群集服务,然后部署软件包。 这是群集服务关闭脚本。
$SvcName = '${bamboo.ServiceName}'
$SvrNames = '${bamboo.deploy.hostname}'
#$SvcName = "'" + $SvcName + "'"
$SvrName = $SvrNames[0]
try {
  $services = Get-WmiObject -Computer $SvrName -Authentication PacketPrivacy -Namespace 'root\mscluster' MSCluster_Resource |
    Where {$_.Type -eq "Generic Service"} |
    Where {$_.name -eq $SvcName}
  if (-Not $Services) {
    $SvcName + " is not installed on this computer."
  } else {
    Switch($services.state) {
      '2' {
        Write-Host "Cluster service $SvcName is online"
        $SvcName = "'" + $SvcName + "'"
        $cmd  = "CLUSTER RES" + ' ' + $SvcName + ' ' + "/OFF"
        $cmd1 = [scriptblock]::Create($cmd)
        Invoke-Command -ComputerName $SvrName -ScriptBlock $cmd1
        Start-Sleep -s 10
        Write-Host "$SvcName is Offline"
      }
      '3' {
        Write-Host "Cluster service $SvcName is Offline"
        Write-Host $_.Exception
        Write-Host $_.Exception.Message
        Start-Sleep -s 10
        break 
      }
      '4'{
        Write-Host "Cluster service $SvcName is in Falied state, Please login to $SvrNames and check event logs"
        Start-Sleep -s 10
      }
    }
  }
} catch {
  $error[0].Exception
  Write-Host $_.Exception
  Write-Host $_.Exception.Message
  break
}

为什么Bamboo在部署日志中明确出现异常或错误信息时不会失败?

我需要在这里做些不同的事情吗? $LASTEXITCODE也无法正常工作。


并非每个错误都是终止性的,即使是终止性错误也可能不会影响脚本,这取决于它们发生的代码执行方式。您所遇到的确切错误是什么,以及在您的代码中的哪个位置出错了? - Ansgar Wiechers
@Ansgar Wiechers,我正在尝试生成错误,以便竹部署项目失败。 我可以在日志中看到异常信息如下。$services = Get-WmiObject -Computer $SvrName -Authentication PacketPrivacy -namespace '' in expression or statement. At C:\Users\svcSACpackages\AppData\Local\Temp\276594690-276758532-277446730-Scr iptBuildTask-985552963083952861.ps1:6 char:88
  • ... cy -namespace 'root\mscluster' `
  • ~~~~~~~~~~~~~~~~~
Unexpected token 'root\mscluster' ` MSCluster_Resource | Where {$.Type -eq "Generic Service"} | Where {$.name -eq $SvcName}
- rambok
请编辑您的问题。 - Ansgar Wiechers
这段代码导致竹子部署项目失败。if($error[0]) { Write-host $error[0] $LASTEXITCODE = 1 exit $lastexitcode } 但我不确定它在所有情况下是否有用。 - rambok
请修改您的问题。 - Ansgar Wiechers
我有完全相同的问题。各种错误都会出现,甚至包括模块加载失败。正在寻找解决方法。 - Eric Giguere
2个回答

1
我找到了另一个解决方法。
大多数PowerShell的错误会抛出异常。由于某种未知原因,Bamboo在执行内联脚本时似乎没有考虑到这一点。
我们可以通过自己在内联中捕获异常来修复这个问题,例如:
try 
{
    Call here some fancy PowerShell functions
}
catch
{
    Write-Host $_.Exception.GetType().FullName, $_.Exception.Message
    exit 500
    # or whatever code not 0
}

有了这个,我能够使部署失败。上面提到的$ error [0]的内联检查也有效,但可能不适用于所有异常情况。


1

exit $LASTEXITCODE 对我有用(如果失败的命令是前一个命令)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接