我最近升级到Capistrano 2.x到3.x,这个过程相当简单。但是,让我感到困惑的是失去了Capistrano 2.x中曾经存在的命令行功能。具体来说,如果我想通过与系统当前登录用户不同的用户部署到远程服务器,我可以运行如下命令:
cap -s user=remote_user staging deploy
Capistrano 3.x允许通过这样的配置设置在部署脚本中设置特定用户;请注意user:
选项:
server 'example.com', user: 'remote_user', roles: %w{app db web}, my_property: :my_value
哪个非常好!但我在设置上进行系统管理,其中多个用户 - 不仅仅是通用deploy
用户 - 可以部署由服务器上的组权限管理的代码。意味着用户,linus
,snoopy
和lucy
都在同一代码上工作,然后在他们自己唯一的用户名下部署,一切正常。不,现在至少可以说,将此设置切换为使用通用deploy
并不是一个简单的选择。代码库是相当简单的PHP代码 - 从部署的角度来看 - 而Capistrano有助于简化部署工作流程。
我不想回到Capistrano 2.x.那么如何让这些用户和Capistrano脚本与Capistrano 3.x设置保持一致,但仍允许每个人通过他们自己的个人帐户独立部署代码?
答案 0 :(得分:0)
那么如何让这些用户和Capistrano脚本保持一致 Capistrano 3.x设置但仍允许用户独立部署 代码通过他们自己的个人帐户?
虽然不像使用-s user=remote_user
的Capistrano 2.x方法那样干净,但是通过在Capistrano 3.x中使用环境变量,可以实现设置自定义用户名的类似目标。这已经过测试,并且在Capistrano 3.4.0中运行良好。
首先要做的是调整服务器设置以允许环境变量。所以server
行如上所示:
server 'example.com', user: 'remote_user', roles: %w{app db web}, my_property: :my_value
现在更改为添加ENV["CAP_USER"]
变量,如下所示:
server 'example.com', user: ENV["CAP_USER"] || 'remote_user', roles: %w{app db web}, my_property: :my_value
逻辑基本归结为:如果设置了ENV["CAP_USER"]
,请使用它。如果没有,请使用remote_user
。
现在要从命令行中利用它,可以像这样部署:
export CAP_USER=remote_user && cap staging deploy
注意export CAP_USER=remote_user
是设置名为CAP_USER
的环境变量的内容,然后在Capistrano 3.x脚本中将其作为ENV["CAP_USER"]
进行访问。 &&
只是一个Bash命令,用于将该命令连接到下一个cap staging deploy
。
如果有人愿意,可以调整他们的~/.bash_profile
以永久性地将CAP_USER
设置为remote_user
,以便基本的cap staging deploy
可以按原样使用,而无需记住复合命令的语法。