capistrano 3.5执行任务如何捕获非零结果

时间:2016-06-26 13:18:11

标签: deployment task capistrano

以下任务位于deploy.rb中,该服务器在服务器上执行两个shell脚本。

task :setup_nginx  do
  on roles(:app) do
    execute "sudo /usr/local/sbin/setup_nginx.sh"
    execute "sudo /usr/local/sbin/ctl_nginx.sh restart"
  end
end

如何检查其中一个脚本是否失败(返回非零值)并采取适当的措施?我想要做的是用错误信息停止执行。

1 个答案:

答案 0 :(得分:1)

正如您可能已经知道的那样,<select ng-model="currentSelectedProperty.Name" ng-init="currentSelectedProperty.Name=data.sortInfo.availableProperties[0]" ng-options="item as item.PropertyDisplayName for item in data.sortInfo.availableProperties track by item.PropertyName"> 会自动引发异常并在检测到非零退出状态时暂停部署。这种行为通常足够好&#34;只要你总是希望命令能够成功执行,任何失败都意味着发生了非常糟糕的事情。

但是,如果您不确定某个命令是成功还是失败,并且您希望优雅地处理失败案例,请使用execute代替test

execute将根据退出状态返回一个布尔值。如果退出状态为零(即成功),则返回test;对于非零,它将返回true

例如:

false

文档:

https://github.com/capistrano/sshkit/blob/master/EXAMPLES.md#make-a-test-or-run-a-command-which-may-fail-without-raising-an-error

  

task :setup_nginx do on roles(:app) do if test "sudo /usr/local/sbin/setup_nginx.sh" # do something on success else # do something different on failure end end end 命令的行为与execute完全相同,但如果命令以非零退出退出(如test()那样),则返回false。当它返回布尔值时,它可用于指示块内的控制流。