竹子部署项目中的内联脚本任务Powershell / batch在出错或在任何异常期间都不会使部署项目失败

时间:2016-02-05 19:58:27

标签: powershell bamboo deployment-project

我使用下面的脚本连接到远程服务器并关闭群集服务然后部署包。 这是集群服务关闭脚本。

$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不起作用。

2 个答案:

答案 0 :(得分:0)

我找到了另一项工作。

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 :(得分:0)

{{1}}适用于我(如果失败的命令是上一个命令)