- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个托管在 Digital Ocean VPS 上的 Ruby 网络应用程序。在当前设置下,我有一个驻留在 VPS 上的 bash 脚本,它在执行时执行以下操作:
显然,这种方法不可扩展(甚至不好)。因此,我正在尝试使用 Travis CI + Capistrano 设置部署管道,该管道会在 git 推送时自动安装、构建、测试和部署此 Web 应用程序。
到目前为止,我们让 Travis CI 在每次 git 推送时执行代码的安装、构建和测试,但我们正在寻找完成部署步骤的最佳方法。因为我们有需要使用 gulp 构建的 JS 和 SASS 文件,所以我们无法直接从 git pull 到服务器上并运行。由于 Travis CI 已经在构建这些文件,我们很好奇利用 Travis CI 构建的文件并将它们直接从 Travis CI 发送到我们的服务器是否合适。
我们考虑过的一些选项:
SCP + 直接传输
喜欢custom deployment FTP example在 Travis CI 上,我们可以将构建的文件通过 SCP 发送到我们的服务器,并调用运行迁移和重启应用服务器的 bash 脚本。
Capistrano + 直接传输
我们可以在 Travis CI 上安装 Capistrano,并使用它直接将在 Travis CI 上构建的文件传输到我们的服务器。在打包和发送之前,我们需要清理所有不需要传输的文件/目录(node_modules、bower 等)。传输包后,我们可以再次使用 Capistrano 提取它、运行数据库迁移并重新启动应用服务器。
为此,我们如何最大限度地减少部署停机时间?我们如何管理错误和回滚?
Capistrano + Git
我们可以将构建的 Travis CI 文件推送到 github 上的 Git 标签,然后使用 Capistrano pull 服务器上的 Git 标签,运行数据库迁移,然后重启应用服务器。
为此,似乎 git 发布应该只针对 prod,那么我们如何管理不同的环境(dev、stage 和 prod)?
无论如何,我们已经在线进行了大量研究,但未能找到满足我们需求的解决方案,该解决方案制定了从 Travis CI 部署到不受支持的部署提供商的最佳标准方法。
鉴于上述情况,从 Travis CI 部署到 VPS 的最佳方式是什么?
最佳答案
我最终使用 Capistrano 任务打包来自 Travis CI 的发布并将其上传到适当的服务器。
我必须在 Capistrano(我称之为 Travis)中创建一个新的 SCM
来覆盖默认 SCM 的发布创建任务。
我已将它发布到这个 github 线程:https://github.com/capistrano/capistrano/issues/722#issuecomment-54653745
为了完成,自定义 Capistrano 代码也在下面。
set :scm, :git
namespace :travis do
desc 'Check that travis is reachable'
task :check do
exit 1 unless true
end
desc 'Package to release'
task :create_release do
run_locally do
execute :mkdir, '-p', :'tmp'
execute "tar -cz --exclude tests --exclude vendor --exclude .git --exclude node_modules --exclude tmp/#{fetch(:release_timestamp)}.tar.gz -f tmp/#{fetch(:release_timestamp)}.tar.gz ."
end
on release_roles :all do
execute :mkdir, '-p', release_path
upload! "tmp/#{fetch(:release_timestamp)}.tar.gz", "#{release_path}/#{fetch(:release_timestamp)}.tar.gz"
execute "tar -xvf #{release_path}/#{fetch(:release_timestamp)}.tar.gz --directory #{release_path}"
execute "rm #{release_path}/#{fetch(:release_timestamp)}.tar.gz"
end
run_locally do
execute "rm -rf tmp"
end
end
desc 'Determine the revision that will be deployed'
task :set_current_revision do
run_locally do
set :current_revision, capture(:git, "rev-parse --short #{fetch(:branch)}")
end
end
end
namespace :deploy do
desc 'Use Travis'
task :use_travis do
set :scm, :travis
end
before :starting, :use_travis
end
关于git - 使用 Travis CI 和 Capistrano 持续部署到 VPS 的良好工作流程是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25392544/
我的 VPS 帐户一直存在内存问题。它运行着一些 WordPress 网站,但它们的流量都很低。对于所有站点的总和,服务器每天只能接待大约 500 名访问者。这会导致数据库停止响应并导致网站崩溃。 找
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 10年前关闭。 Improve this qu
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭12 年前。 Improve th
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我在centos 7中的vps,我有用java开发的应用程序,3个文件 .jar 。我需要在 vps 启动或登录时运行此文件,例如“java -jar file-name”我如何运行该文件(如服务)
今天有位lnmp一键安装包用户找到我说centos 5.4 32bit独立服务器上安装lnmp一键安装包不成功,/usr/local/下面php mysql nginx的目录都没有,用root登录后
我正在尝试将我的应用程序绑定(bind)到我的 VPS。 你能告诉我每个 VPS 都有唯一的标识符吗? 理想情况下,可以通过 Ubuntu 服务器中的命令确定。 提前致谢。 最佳答案 想到三件事。 M
我目前有一台运行 Cherokee 的服务器,但我的软件有很多问题,需要来自其他服务器(主要是 Apache)的特定技术,我正在考虑切换到 Bitnami 堆栈,因为我有一些不同的软件(Wordpre
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 去年关闭。 社区去年审查了是否重新开
我正在尝试在 Azure 上打开多个端口。我有一个 VPS,带有一个网络安全组和一个虚拟网络和子网。一切似乎都配置正确,检查图像: 但尝试 ping 任何端口,例如 8080: nc -zv 52.1
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭 9 年前。 此问题似乎与 a specific programming problem, a sof
我想在 (VPS) linu 系统下安装 Bitcoind。我得到了如何进行此安装的分步教程,但每次我尝试添加存储库时,我都会在控制台上收到以下错误消息“sudo: add-apt-repositor
我敢肯定你们中的很多人曾经和我现在处于同样的境地。 之前 我曾经拥有共享主机大约 2 年。每当我创建一个新站点时,我都会习惯它。我只需要通过 FTP 将我的整个新文件夹包括:index.html、样式
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
点击开始后选择运行->输入mstsc命令并确定,输入IP地址,用户名和密码就可以进行远程操作了 很多用户因为不是计算机行业,所以都不知道如何远程连接自己购买的主机。本篇文章将告诉客户如何进行
1、安装计划任务 这个程序在某些系统上可能没有预装,需要执行下面的命令进行安装。 yum install -y vixie-cron 然后启动服务 service crond start
备份的数据如果不是特别大的话,不建议压缩,防止其中可能会有已经被多次压缩过的文件损坏。 备份数据库的方式为停止MYSQL服务后备份DATA目录,期间MYSQL会中止数秒至数十秒。请自行权衡利弊。
很多用户因为不是计算机行业,所以都不知道如何远程连接自己购买的主机。本篇文章将告诉客户如何进行远程连接,按照下面的步骤可以连接到自己主机远程管理桌面。 1、通过命令,具体如下: 点击开始后选择运
前些时谈了一下如何屏蔽对网站服务器的扫描,属于前台防御。后来 Felix 发了一篇 blog 提到将多次尝试 SSH 登录失败的 IP ban 掉,才想起来去看一下日志,没想到后院起火了。 
在网络的大世界中,vps,云主机,独立服务器都是比较常见的建站软件,尤其对于电子商务,网上赚钱的朋友更是尤为的重要,那么在生活中比较常见的vps,云主机,独立服务器都是什么意思,刚建站的朋友想
我是一名优秀的程序员,十分优秀!