天道酬勤,学无止境

在共享主机上没有 git 命令的 Capistrano 部署?(Capistrano deployment without git command on shared host?)

问题
  • 开发人员 A - 本地存储库 --> 拉/推 ---> github
  • 开发人员 B - 本地存储库 --> 拉/推 ---> github
  • Capistrano 将保留在我们开发人员的机器上,但是我们将定义 :repository 以指向我们的 GitHub 项目: set :repository, "git@github.com:myuser/myproject.git" # My clone url
  • 必须允许开发人员 A 或开发人员 B 将提交的文件部署到生产机器。

我不确定这里的第三点,这可能吗?

ctcherry 在这里告诉我在这个工作流程上,是否需要在生产服务器上安装 git 命令? 那:

1) 默认情况下,Capistrano 将从存储库部署,因此部署的文件将来自检入 github 的代码。 您可以配置 Capistrano 以使用不同的“部署策略”从开发人员本地计算机部署它,请参见此处:http://rubydoc.info/gems/capistrano/2.5.19/Capistrano/Deploy/Strategy/Copy

但我在这里仍然有疑问。

如果我们使用这种方法,这里的确切工作流程会是什么?

  • 从开发者机器 A - 我们使用 Capistrano 从 github 获取提交的文件。
  • 从同一台开发人员机器 A - 我们通过 SSH 将这些文件部署到共享主机中,这些文件将被放置在正确的位置?

是这样吗?

更新:请我从来没有使用过 Git 或 Capistrano Deploy,但是,我正在尽我最大的努力去了解这一切是如何工作的,以便为我的基于 ZF 的应用程序提供一个良好的工作流开发过程。

所以我的问题是非常基本的。

如果我必须提供任何其他信息,请告诉我。

非常感谢。

回答1

工作流程是一样的。 发生的情况是,每当任何开发人员尝试部署项目时,Capistrano 都会首先将项目的新副本检出到他们机器上的临时目录中,将其压缩,然后将其上传到远程服务器。 在远程服务器上,存档将被解压缩,其他一切正常。

请注意,这种方法比“正常”部署要慢得多,尤其是在您的 Internet 连接速度较慢的情况下,因为每次都在复制整个项目。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 尽管有 SSH 密钥,但 Capistrano 在部署时要求输入密码(Capistrano asks for password when deploying, despite SSH keys)
    问题 我的 ssh 密钥绝对设置正确,因为在使用 ssh 时从未提示我输入密码。 但是在使用cap deploy时, capistrano 仍然要求输入密码。 奇怪的是,当我使用cap deploy:setup时,它不会要求输入密码。 如果没有密码提示,它会使部署周期更加顺畅。 细节:我正在将 Sinatra 应用程序部署到 Dreamhost 共享帐户(使用Passenger)。 很久以前我就按照教程进行了操作,当时效果很好。 从那以后有些东西坏了。 我正在使用 capistrano (2.5.9) 和 git 版本 1.6.1.1。 这是我的 Capfile: load 'deploy' if respond_to?(:namespace) # cap2 differentiator set :user, 'ehsanul' set :domain, 'jellly.com' default_run_options[:pty] = true # the rest should be good set :repository, "ehsanul@jellly.com:git/jellly.git" set :deploy_to, "/home/ehsanul/jellly.com" set :deploy_via, :remote_cache set :scm, 'git'
  • 在这个工作流中,git 命令需要安装在生产服务器上吗?(On this workflow, does git command needs to be installed on the production server?)
    问题 开发人员 A - 本地存储库 --> 拉/推 ---> github 开发人员 B - 本地存储库 --> 拉/推 ---> github Capistrano 将保留在我们开发人员的机器上,但是我们将定义 :repository 以指向我们的 GitHub 项目: set :repository, "git@github.com:myuser/myproject.git" # My clone url 必须允许开发人员 A 或开发人员 B 将提交的文件部署到生产机器。 问题 1) 那些提交的文件将来自其中一台 Developers 机器,对吗? 问题2) 此过程是否需要我的共享主机具有 git 命令支持? 非常感谢。 回答1 1) 默认情况下,Capistrano 将从存储库部署,因此部署的文件将来自检入 github 的代码。 您可以配置 Capistrano 以使用不同的“部署策略”从开发人员本地机器部署它,请参见此处:http://rubydoc.info/gems/capistrano/2.5.19/Capistrano/Deploy/Strategy/Copy 2)取决于你最终做什么,使用从github拉取代码的默认策略,你需要安装git,如果你使用上面链接的复制策略,你就不会。 回答2 使用 github 和 capistrano 意味着您的服务器将需要访问
  • 与Capistrano一起部署在Heroku上吗?(Deploying on Heroku with Capistrano?)
    问题 我仍然习惯于Rails开发生态系统。 最近,我学习了如何使用capistrano使用apache和passenger部署到我的服务器上,并且我喜欢如何将一组相当复杂的部署指令放入我的deploy.rb中,以便通过一个“ cap deploy”调用执行它们,如果有任何问题,会自动回滚。 现在,我正在考虑在Heroku上部署我的项目,并且希望能够在我的部署中使用capistrano。 但是我一直找不到有关如何执行此操作的任何文档。 是否可以? 是否有Capistrano任务可以让我在Heroku上自动化部署? 这有道理吗? 毕竟,capistrano以特定的方式工作(通过SSH进入服务器)并采用特定的目录结构(公共/发行版/共享等)。 据我所知,这两个在Heroku中都是不可能的。 但是我仍然想方便地获得capistrano。 我知道我可以将部署所需的步骤(git push / migrate / restart resque worker ...)放入单个rake任务中,并且可以通过调用单个命令来方便地进行部署; 但我不会获得Capistrano交易和回滚的好处,这在我看来非常重要。 关于这些技术如何组合在一起,我可能会缺少一些非常基本的知识。 我没能在任何地方找到关于此主题的任何讨论,这让我感到惊讶。 谁能分享他们的经验? 回答1 Heroku使用Git进行部署
  • 使用capistrano从不同的git分支进行部署(Using capistrano to deploy from different git branches)
    问题 我正在使用capistrano部署RoR应用程序。 代码库位于git存储库中,分支在开发中被广泛使用。 Capistrano使用deploy.rb文件进行设置,其中之一是要从中进行部署的分支。 我的问题是:假设我从master创建了一个新的分支A。 部署文件将引用master分支。 我对此进行了编辑,因此可以将A部署到测试环境。 我完成了该功能,然后将分支A合并到master中。 由于来自A的deploy.rb文件较新,因此将其合并,现在master分支中的deploy.rb引用A。 是时候再次编辑了。 这似乎是很多不必要的手动编辑-参数应始终与当前分支名称匹配。 最重要的是,很容易忘记每次都编辑设置。 自动化此过程的最佳方法是什么? 编辑:原来有人已经完全按照我的需要做了: 今天早上,我有机会将git仓库的一个分支部署到登台服务器,但是却没有一个最模糊的主意。 快速浏览capistrano源代码发现,我可以在部署脚本中使用set :branch "branch_name" 。 我尝试了一下,它奏效了。 然后,我认为我需要在所有分支机构中进行类似的更改。 当然,我是个懒汉,想知道是否有更好的方法。 如果您不熟悉git,则git branch命令的输出是分支列表,其中带有星号标记当前在本地计算机上签出的分支。 例如: > git branch * drupal
  • 如何将 Capistrano 与 Docker 集成进行部署?(How to integrate Capistrano with Docker for deployment?)
    问题 我不确定我的问题是否相关,因为我可能会尝试混合不应混合的工具(Capistrano 和 Docker)。 我最近对一个使用 Capistrano 部署的应用程序进行了docker化。 Docker compose 用于开发和登台环境。 这是我的项目的样子(未显示应用程序文件): Capfile docker-compose.yml docker-compose.staging.yml config/ deploy.rb deploy staging.rb Docker Compose 文件创建了所有必要的容器(Nginx、PHP、MongoDB、Elasticsearch 等)以在开发或暂存环境中运行应用程序(因此在docker-compose.staging.yml定义了一些特定参数)。 使用以下命令将应用程序部署到暂存环境: cap staging deploy 服务器上的文件夹架构是 Capistrano 之一: current releases 20160912150720 20160912151003 20160912153905 shared 以下命令已在临时服务器的current目录中运行,以实例化运行应用程序所需的所有容器: docker-compose -f docker-compose.yml -f docker-compose.staging.yml
  • 是否可以让 Capistrano 通过反向 SSH 隧道进行结账?(Is it possible to do have Capistrano do a checkout over a reverse SSH tunnel?)
    问题 我正在开发一个驻留在公共主机上的应用程序,但我必须将其源代码保存在公司防火墙后面的 Git 存储库中。 我对通过scp部署的缓慢感到非常厌倦(复制整个存储库并在每次部署时通过 SSH 传送它),并希望远程主机只需执行git pull来更新。 问题是防火墙禁止传入的 SSH 连接。 我是否可以设置从我的计算机到部署计算机的 SSH 隧道并使用我的存储库作为git pull的源? 毕竟, git是分布式的,所以我的副本和中央副本一样是有效的存储库。 如果这是可能的,隧道命令和 Capistrano 配置是什么? 我认为隧道看起来像 ssh -R something:deployserver.com:something deploybot@deployserver.com 回答1 Net::SSH 实现远程转发。 我查看了所有 Capistrano 的源代码,但在当前版本中看不到任何对它的引用。 尽管如此,这并不能阻止您在使用 Capistrano 部署之前建立远程转发。 您要做的是分别设置:local_repository和:repository路径。 :local_repository在本地引用以确定在启动连接之前将用于部署的提交。 这留下:repository供远程服务器在连接启动后从中提取。 您可以在此处指定防火墙后存储库的路径。 # deploy.rb set
  • Capistrano SSH :: AuthenticationFailed,不提示输入密码(Capistrano SSH::AuthenticationFailed, not prompting for password)
    问题 我已经成功使用了capistrano一段时间了,突然间,在我失去了部署能力的每个项目中。 环境: os X(小牛) 红宝石1.9.3p194 rvm(本地,不在服务器上) 导轨3.2及以上 RubyGems 1.8.25 我没有使用rsa_keys或我想要capistrano提示输入用户名和密码的任何东西。 突然,它决定不要求输入密码,而是要求用户输入。 然后它回滚并给我以下错误。 [deploy:update_code] exception while rolling back: Capistrano::ConnectionError, connection failed for: sub.example.com (Net::SSH::AuthenticationFailed: Authentication failed for user user@sub.example.com) connection failed for: sub.example.com (Net::SSH::AuthenticationFailed: Authentication failed for user user@sub.example.com) 这是在我的个人笔记本电脑和工作中的iMac上发生的。 部署到两个不同的服务器(两个linux)时会发生 我在这里完全不知所措。 有任何想法吗?
  • 如何使用 Capistrano 部署到单个特定服务器(How to deploy to a single specific server using Capistrano)
    问题 我有一个生产系统,它有多个服务器,扮演多个角色。 我想通过部署到该特定服务器来测试新的应用程序服务器,而不必重新部署到生产中的每台服务器。 有没有办法让 Capistrano 部署到特定的服务器? 理想情况下,我希望能够运行类似 cap SERVER=app2.example.com ROLE=app production deploy 如果我只是想部署到 app2.example.com。 谢谢! [更新]我通过执行以下命令尝试了wulong建议的解决方案: cap HOSTS=app2.server.hostname ROLE=app qa deploy 但是除了应用程序任务之外,capistrano 似乎还试图为该服务器上的其他角色执行任务。 也许我需要更新我的上限版本(我正在运行 v2.2.0)? 回答1 我最终在此处的 capistrano 用户列表上发布了一个问题,并得到了 Jamis 的以下回复(为了清楚起见,我在此处进行了一些编辑): 尝试 HOSTS 环境变量: cap HOSTS=app2.example.com production deploy 请注意,这样做会将 app2 视为在每个角色中,而不仅仅是它恰好被声明在哪个角色中。 如果您想要进行常规部署,但仅作用于 app2,并且仅当 app2 在您的配方文件中声明时,您可以改用 HOSTFILTER
  • 帽流产! SSHKit::Runner::ExecuteError:在主机上执行时出现异常(cap aborted! SSHKit::Runner::ExecuteError: Exception while executing on host)
    问题 我正在尝试使用 Capistrano 3 将代码从 GIT 存储库部署到 Ubuntu 服务器,但出现此错误。 ================================================== ======================== 这是我的 Gemfile。 gem 'capistrano', '~> 3.1.0' #//Use unicorn as the app server gem 'unicorn' #// Use Capistrano for deployment group :development do gem 'capistrano-rails' gem 'capistrano-bundler' gem 'capistrano-rbenv', "~> 2.0" end source 'https://rubygems.org' ================================================== ========================#deploy.rb lock '3.1.0' #// Define the name of the application set :application, 'my_app' #// Define where can Capistrano access
  • 使用 Capistrano 的 Git 工作流程(Git Workflow With Capistrano)
    问题 我正在尝试使用 capistrano 来了解一个好的 git 工作流程。 我找到了一些不错的文章,但我要么没有完全理解他们的建议(可能),要么他们有些缺乏。 到目前为止,这是我的想法,但我遇到了何时合并回主分支(即在移至舞台之前?之后?)并尝试将其挂接到 capistrano 进行部署的问题: 确保您了解其他开发人员在远程 master 分支上所做的所有更改git checkout master git pull 创建一个与您要修复的特定错误相关的新分支git checkout -b bug-fix-branch 进行更改git status git add . git commit -m "Friendly message about the commit" 所以,这通常是我卡住的地方。 在这一点上,我有一个正常的master分支和一个新的bug-fix-branch ,其中包含我的(未经测试 - 除了单元测试)更改。 如果我想将我的更改推送到阶段(通过cap staging deploy ),我是否必须将我的更改合并回 master 分支(我不想这样做,因为似乎 master 应该没有未经测试的代码)? 我什至从 master 部署(或者我应该先标记一个版本,然后修改我的production.rb文件以从该标记部署)? git-deployment
  • Rails 4 + Capistrano 3:致命:部署时无法从远程存储库读取(Rails 4 + Capistrano 3 : fatal: Could not read from remote repository while deploying)
    问题 使用 Capistrano 3 部署 Rails 4 应用程序时出现以下错误 INFO [87512eb8] Running /usr/bin/env chmod +x /tmp/magnificent/git-ssh.sh as deploy@104.236.6.180 DEBUG [87512eb8] Command: /usr/bin/env chmod +x /tmp/magnificent/git-ssh.sh INFO [87512eb8] Finished in 0.444 seconds with exit status 0 (successful). INFO [1ec94dd1] Running /usr/bin/env git ls-remote --heads git@github.com:BoTreeConsultingTeam/magnificent.git as deploy@104.236.6.180 DEBUG [1ec94dd1] Command: ( GIT_ASKPASS=/bin/echo GIT_SSH=/tmp/magnificent/git-ssh.sh /usr/bin/env git ls-remote --heads git@github.com:BoTreeConsultingTeam/magnificent.git )
  • 从登台服务器连接到 GitoLite 时出错 - ECONNREFUSED 部署错误(Error Connecting to GitoLite from Staging Server - ECONNREFUSED Deploy Error)
    问题 我在尝试将以前工作的项目部署到开发服务器时遇到了一些麻烦。 我没有设置系统,但是我确实拥有我需要的所有凭据(我认为)。 在尝试 cap staging deploy 之后,我得到了这么多,然后它产生了一个错误。 请看下面: triggering load callbacks * 2012-11-20 14:52:20 executing `staging' triggering start callbacks for `deploy' * 2012-11-20 14:52:20 executing `multistage:ensure' Identity added: /Users/XXX/.ssh/id_rsa (/Users/XXX/.ssh/id_rsa) * 2012-11-20 14:52:20 executing `deploy' * 2012-11-20 14:52:20 executing `deploy:update' ** transaction: start * 2012-11-20 14:52:20 executing `deploy:update_code' executing locally: "git ls-remote ssh://gitolite@repo1:2011/proto_projectname_rails HEAD" command
  • 在 Git 版本控制下将 Web 项目部署到共享主机 [关闭](Deploy web project under Git version control to shared hosting [closed])
    问题 关闭。 此问题不符合 Stack Overflow 准则。 它目前不接受答案。 想改善这个问题吗? 更新问题,使其成为 Stack Overflow 的主题。 去年关闭。 改进这个问题 我正在开发一个 WordPress 主题,该主题使用 Git 并在本地开发区域 ( WAMP ) 中进行版本控制。 我使用 smartgit 作为 GUI 向 Bitbucket 推送提交。 我有 2 个分支,master 和 development。 我想将开发分支部署到临时区域(在我的实时服务器上安装 WordPress)。 我曾尝试使用 ftploy 来实现这一点; 但是它似乎不允许我选择要部署的分支,我想为实际的最终部署保留主分支的部署。 我正在使用共享主机,但我有 SSH 访问权限。 如何最好地实现将开发分支部署到共享主机? Git 未安装在服务器上(也不能安装)。 回答1 有一篇文章为 Git 自动部署建议了 7 个应用程序: 豆茎——http://beanstalkapp.com 部署——https://www.deployhq.com Springloops — http://www.springloops.io Wercker — http://wercker.com Octopus 部署 [.NET] — https://octopusdeploy.com
  • 将参数传递给 Capistrano(Passing parameters to Capistrano)
    问题 我正在研究使用 Capistrano 作为通用部署解决方案的可能性。 通过“通用”,我的意思是非导轨。 我对我找到的文档的质量并不满意,不过,当然,我不是在看那些假定您正在部署 Rails 的文档。 因此,我将尝试根据几个示例来解决一些问题,但是从一开始我就面临着一些问题。 我的问题是cap deploy没有足够的信息来做任何事情。 重要的是,它缺少我要部署的版本的标签,这必须在命令行上传递。 另一个问题是我如何指定我的 git 存储库。 我们的 git 服务器是通过用户帐户上的 SSH 访问的,但我不知道如何更改deploy.rb以使用用户 ID 作为 scm URL 的一部分。 那么,我该如何完成这些事情呢? 例子 我想部署第二个版本的第一个冲刺的结果。 这在 git 存储库中标记为r2s1 。 另外,假设用户“johndoe”获得了部署系统的任务。 要访问存储库,他必须使用 URL johndoe@gitsrv.domain:app 。 因此存储库的远程 URL 取决于用户 ID。 获取所需文件的命令行如下: git clone johndoe@gitsrv.domain:app cd app git checkout r2s1 回答1 更新:对于 Capistrano 3,请参阅下面 scieslak 的回答。 jarrad 曾说过,capistrano-ash
  • Capistrano - 如何将文件放入共享文件夹?(Capistrano - How to put files in the shared folder?)
    问题 我是Capistrano新手,我看到有共享文件夹和选项:linked_files 。 我认为共享文件夹用于在版本之间保存文件。 但我的问题是,文件如何最终出现在共享文件夹中? 另外,如果我想将另一个目录符号链接到当前目录,例如某个路径上的静态文件夹,我该如何将它放在linked_dirs ? 最后如何将chmod 755设置为linked_files 和linked_dirs。 谢谢你。 回答1 应用程序内的文件夹是共享目录中文件夹的符号链接。 如果您的应用写入log/production.log ,它实际上会写入../shared/log/production.log 。 这就是文件最终位于共享文件夹中的方式。 您可以通过查看 Capistrano 中的功能规范或测试来了解其工作原理。 如果你想修改这些共享文件,你可以直接通过 ssh 执行一次,因为它们在创建后不会被 Capistrano 修改。 要添加链接目录,请在您的deploy.rb : set :linked_dirs, %w{bin log tmp/backup tmp/pids tmp/cache tmp/sockets vendor/bundle} 或者 set :linked_dirs, fetch(:linked_dirs) + %w{public/system} 回答2 卡皮斯特拉诺 3.5+
  • 使用 git 更改存储库时出现 Capistrano 错误(Capistrano error when change repository using git)
    问题 我通过来自 Git 存储库的 capistrano 进行了简单的部署。 我想改变我正在使用的存储库,所以我基本上只是改变了 设置:存储库,“git@github.com:new_repository” 但是我在部署时收到以下错误: 致命:无法解析对象“9cfb...”。 一旦我改变,问题就消失了 设置 :deploy_via, :remote_cache 至 设置 :deploy_via, :copy 我也试过 deploy:cleanup 但我收到以下错误: *`deploy:cleanup' 只对匹配 {:except=>{:no_release=>true}} 的服务器运行,但没有匹配的服务器* 知道如何让 remote_cache 再次工作吗? 谢谢! 回答1 使用 capistrano 3,为了避免删除 repo 文件夹: 更改config/deploy.rb的 repo URL,因为 OP 已经这样做了通过 SSH 连接到您的服务器并更改 git repo 的远程 URL: ssh user@server.com # Go the capistrano deploy root cd /capistrano/deploy/root/folder # Go inside the folder names *repo* cd repo # Manually change
  • 如何在 capistrano 3 中为用户设置默认 shell 或 sudo(How to set a default shell or sudo to a user in capistrano 3)
    问题 我目前正在从 Capistrano 2.x 迁移到 Rails 应用程序的 3.x 并遇到以下问题。 服务器上的一般设置包含一个部署用户,该用户应该负责部署,但是当用户进行部署时,他们使用自己的用户名连接到服务器。 在 Capistrano 2.x 中,我能够使用default_shell选项完成此操作。 set :default_shell, "sudo -u deploy /bin/sh" 这在 Capistrano 3.x 中不起作用。 有没有办法在 before 钩子中设置 shell 或 sudo 到部署用户? 我尝试过的事情: 如上所述,设置:default_shell选项不起作用。 我尝试在 before 钩子中对用户进行 sudo-ing。 类似于sudo -s -u deploy东西,它在 capistrano 之外工作正常。 顺便说一下,我的用户设置了无密码 sudo 给部署用户。 但在 Capistrano 中,它运行命令然后挂起。 根据这个 SO 问题,似乎可以在每个命令之前添加sudo -u deploy ,但这似乎并不完全有效。 在几个命令中,部署仍然中止,并以我的用户身份在权限被拒绝时执行异常。 我可以单独将一些命令映射为SSHKit.config.command_map[:git] = 'sudo -u deploy git'
  • Capistrano 3 SSHKit::Runner::ExecuteError:在主机 [hostname] 上执行时出现异常,无法使用请求的身份对数据进行签名(Capistrano 3 SSHKit::Runner::ExecuteError: Exception while executing on host [hostname ]agent could not sign data with requested identity)
    问题 将我的 rails 应用程序部署到 ubuntu 服务器时出现以下错误,我正确设置了 ssh 密钥,我可以通过 ssh 连接到服务器,但是当我尝试执行此操作时出现以下错误 cap production deploy 这是错误信息 cap aborted! SSHKit::Runner::ExecuteError: Exception while executing on host xxxxxx.xxxxxxx.xxx: agent could not sign data with requested identity 我无法弄清楚我做错了什么,因为我之前已经部署过,我只需要更新我的应用程序以进行更改。 自上次部署以来,我没有更改我的deploy.rb、Capfile 或 deploy/production.rb文件 回答1 我通过发出ssh-add解决了类似的问题。 似乎我当前的环境没有正确地拿起钥匙并阅读它们解决了这个问题。 回答2 我有同样的错误。 ssh-copy-id user@ipaddress 帮我解决了这个问题。 回答3 我遇到了同样的问题,但在我的情况下,我必须从本地计算机中删除文件.ssh/known_hosts 。 回答4 将 Rails 从 4.1.x 升级到 4.2 后,我在尝试捆绑时开始遇到类似的错误。 我通过删除共享包目录来修复它。
  • 将工具和脚本部署到生产的最佳实践?(Best practices for deploying tools & scripts to production?)
    问题 我有许多在 Linux/PHP 网站后台运行的批处理进程。 它们的数量和复杂性开始增加,所以我想用少量的过程来处理它们。 我的源代码树有一堆 cpp 文件和脚本,按照开发而不是部署进行组织。 编译完所有可执行文件后,我需要将各种脚本和二进制文件放在一组机器上。 不同的机器需要不同的可执行文件、脚本和配置文件来进行批处理。 我还编写了一些属于每台机器的工具。 目前,这个部署过程是手动的并且容易出错。 我猜我最终会得到一个脚本,该脚本在源代码树的根部运行并构建一个包含任何机器所需的一切的较小树。 然后,我将把它同步到合适的机器上。 但我很好奇其他人是如何处理这类问题的。 有任何想法吗? 回答1 这里有几类工具。 有些人使用这些类别的工具组合。 例如,我有时同时使用 Puppet 和 Capistrano。 有关讨论,请参阅 Puppet 或 Capistrano - 使用正确的工具进行工作。 旨在部署应用程序的脚本工具: 此类别中工具的一般模式是您创建脚本和/或配置文件,通常使用类似于 Makefile 的命令集,该工具将通过 ssh 连接到您的生产框,检查您的源代码,然后运行任何其他必要的步骤。 这方面的工具通常具有回滚到先前版本的功能。 所以他们会检查你的源代码到releases/目录,如果一切顺利的话,他们会创建一个从“current”到“releases/”的符号链接。
  • 使用 Capistrano + Gitlab 部署,使用 via:remote_cache(Deployment using Capistrano + Gitlab using via: remote_cache)
    问题 我正在使用 capistrano 部署 PHP Web 应用程序,我们有一个内部 gitlab 服务器,该服务器无法在网络外部访问。 我正在尝试使用 remote_cache 进行部署,因为如果使用它进行复制需要很长时间。 我已经检查了 This 和 This 但没有得到想要的结果。 我正在尝试下面的代码。 set :default_stage, "staging" ssh_options[:forward_agent] = true server "servername", :app, :web, :db, :primary => true set :application, "appname" set :scm, :git set :repository, '.' set :local_repository, "file://." set :branch, "master" default_run_options[:pty] = true set :keep_releases, 2 set :user, 'username' set :deploy_to, "/home/domain/public_html/test" set :copy_cache, true set :deploy_via, :remote_cache set :copy_strategy,