deployment - 无论错误如何,都使用 capistrano 执行代码

标签 deployment capistrano continuous-deployment

我正在寻找一种方法来确保 capistrano 无论如何都会在运行结束时启动我的 tomcat。 我在部署运行开始时停止它,但在不太可能出现错误的情况下,我无法再次启动它,即使错误只是找不到我想要部署的工件。 我可以将启动它添加到每个 on_rollback{} 中,但我宁愿找到一种更简洁的方法。

那么,换句话说,有没有一个相当于Java的finally关键字的capistrano呢?

最佳答案

我假设您问的是 Capistrano 2。

有之前和之后的命令。

你可以这样做:

 after :deploy, :restart_tomcat

还有一些方法可以执行 on_error => continue

以下是我的 Java 应用程序重新启动脚本中的一些片段。请注意,before(或after)的位置位于任何 namespace 声明之前。另请注意,在停止应用程序时,我忽略了错误。如果应用程序无法启动,我希望出现错误。

请记住,我在环境部署上调用初始化,或者开发人员可以手动调用该任务来重置环境。无论是在 :deploy 中调用还是作为 app.deploy.initialize_app 调用,它都有效。

before "app:deploy:initialize_app", "app:deploy:stop_app"

namespace :app do
 namespace :deploy do

  task :initialize_app, :roles => :app do
  #Do Stuff.
  end

  task :stop_app, :roles => :app, :on_error => :continue do
  run "cd '#{deploy_to}/current/app/bin'; #{java_home_cmd}; ./tcserver.sh #{stage_name} stop"
end

  task :restart_app, :roles => :app do
  app.deploy.stop_app
  print "Sleeping 60 seconds.\n"
  sleep 60
  run "cd '#{deploy_to}/current/app/bin'; #{java_home_cmd}; ./tcserver.sh #{stage_name} start"
end
end
end

关于deployment - 无论错误如何,都使用 capistrano 执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18142968/

相关文章:

go - 为我用 Go 编写的 Web 应用程序设置什么 GOARCH?

javascript - “meteor run android-device”需要永远安装 Cordova 插件

git - 如何将部署的 git 修订写出到 Capistrano 中的文件

ruby-on-rails - Capistrano 如何解决无法用非目录覆盖目录 '/var/local/app/current'?

ios - 在没有实体 iPhone 的情况下获取 .IPA 文件

docker - 如何实现滚动更新和关系数据库?

azure - 管理 Azure 应用服务中的 Docker 镜像以进行登台和生产

java - 如何从 NetBeans 部署到 Tomcat?

git - 部署后切换到的更改分支

kubernetes - ArgoCD app-of-apps 创建子应用程序但不在应用程序内部署 list