如何使用Capistrano 3通过命令行上的服务器上的其他用户名部署代码



我最近升级到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用户)可以部署由服务器上的组权限管理的代码。意思是用户linussnoopylucy,并且所有用户都在相同的代码上使用,然后在其自己的独特用户名下部署,并且一切都起作用。不,将此设置切换到使用通用deploy是至少可以说是不容易的选择。该代码库是相当简单的PHP代码(从部署的角度来看),Capistrano有助于简化部署工作流程。

我不想回到Capistrano 2.x。那么,如何将这些用户和Capistrano脚本与Capistrano 3.x设置保持一致,但仍然允许每个人通过自己的单个用户帐户独立部署代码?

因此,如何将这些用户和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可以用作IS,而无需记住复合命令的语法。

相关内容

最新更新