Tom*_*oss 120 git capistrano
我正在使用capistrano来部署RoR应用程序.代码库位于git存储库中,分支广泛用于开发.Capistrano使用deploy.rb文件进行设置,其中一个是要部署的分支.
我的问题是这样的:比方说,我创建了一个新的分支一个从主.部署文件将引用master分支.我编辑它,所以可以部署A来测试环境.我完成了该功能,并将分支A合并到主服务器中.由于deploy.rb从文件一个是新鲜的,它被合并了,现在deploy.rb在主分支引用一个.是时候再次编辑了.
这是很多看似不必要的手动编辑 - 参数应始终与当前分支名称匹配.最重要的是,每次都很容易忘记编辑设置.
什么是自动化这个过程的最佳方法?
编辑:结果已经完成了我所需要的人:
今天早上我有机会将一个git存储库的一个分支部署到一个临时服务器,但是没有最模糊的想法.通过capistrano源代码快速搜索显示我可以
:branch "branch_name"在部署脚本中使用set .我尝试了它,它的工作原理.然后我想我需要对所有分支进行类似的更改.当然,我是一个懒惰的草皮,并想知道是否有更好的方法.如果您不熟悉git,git branch命令的输出是一个带有星号的分支列表,标记当前在本地计算机上签出的星号.例如:
Run Code Online (Sandbox Code Playgroud)> git branch * drupal_authentication fragment_caching master所以,我想,如果我只是解析输出并搜索标记为当前的分支:
Run Code Online (Sandbox Code Playgroud)set :branch, $1 if `git branch` =~ /\* (\S+)\s/m现在,我可以从单个共享的部署脚本部署本地计算机上当前的任何分支.
win*_*ons 148
这适用于Capistrano> = 3.1:
将此行添加到config/deploy.rb:
set :branch, ENV['BRANCH'] if ENV['BRANCH']
Run Code Online (Sandbox Code Playgroud)
然后调用capistrano:
cap production deploy BRANCH=master
Run Code Online (Sandbox Code Playgroud)
此解决方案适用于Capistrano <3.1:
# call with cap -s env="<env>" branch="<branchname>" deploy
set :branch, fetch(:branch, "master")
set :env, fetch(:env, "production")
Run Code Online (Sandbox Code Playgroud)
Eri*_*hic 32
使用Capistrano 3.1.0+,这些都不再适用于我.相反,根据他们的评论说明:
ask :branch, proc { `git rev-parse --abbrev-ref HEAD`.chomp }
Run Code Online (Sandbox Code Playgroud)
但是,你不想使用ask或它会提示你.相反,你应该使用set.HEAD是最顶级的分支; 它被称为'边缘'.如果你想要一个不同的分支,替换HEAD你的支行名称,如:master,staging等等.
在结束示例中/config/deploy/production.rb,您可以包含以下行:
set :branch, proc { `git rev-parse --abbrev-ref master`.chomp }
Run Code Online (Sandbox Code Playgroud)
...要么
set :branch, proc { `git rev-parse --abbrev-ref HEAD`.chomp }
Run Code Online (Sandbox Code Playgroud)
顺便说HEAD一下,是默认设置,所以不需要在文件中真正说明.可能会更好地用于/config/deploy/edge.rb.
在/config/deploy/staging.rb,你可以包括这一行:
set :branch, proc { `git rev-parse --abbrev-ref staging`.chomp }
Run Code Online (Sandbox Code Playgroud)
...要么
set :branch, proc { `git rev-parse --abbrev-ref test`.chomp }
Run Code Online (Sandbox Code Playgroud)
你明白了!
我希望这些例子能够帮助未来的capistrano用户(^_^)
Dav*_*sey 27
有了多级,它现在实际上是:
cap production deploy -s branch=my-branch
Run Code Online (Sandbox Code Playgroud)
以前的帖子语法在我的环境中不起作用
Pau*_*eon 24
我可以确认以下内容仍然适用于第3.11.0章第13/10/18号以及第2章:
在deploy.rb/stage.rb中:
set :branch, ENV['BRANCH'] || 'develop'
Run Code Online (Sandbox Code Playgroud)
在命令行上:
cap deploy BRANCH=featurex
Run Code Online (Sandbox Code Playgroud)
这为您提供了一个默认分支(对于不同的环境可能会有所不同),以及在需要时更改分支的功能.
nav*_*n87 15
或者,您可以从具有默认分支和环境的命令行构建它,并且您还可以将参数传递给cap调用,该调用可以包括要使用的环境和分支.这可能是显式传递的分支,或者您可以使用一个参数来指示当前分支,如您列出的链接中所述.
#call with cap -S env="<env>" branch="<branchname>" deploy
...
# Prevents error if not parameter passed, assumes that default 'cap deploy' command
# and should deploy the master branch to the production server
set(:env, ‘production’) unless exists?(:env)
set(:branch, ‘master’) unless exists?(:branch)
if !env.nil? && env == "production"
role :web, "production_ip_address"
else # add more as needed
role :web, "development_ip_address"
end
if !branch.nil? && branch == "current"
set :branch, $1 if `git branch` =~ /\* (\S+)\s/m
elsif !branch.nil?
set :branch, branch
else # add more as needed
set :branch, "master"
end
...
Run Code Online (Sandbox Code Playgroud)
asy*_*ric 10
如果你正在使用capistrano-multistage,你只需要运行
cap -s branch=$MY_BRANCH deploy
Run Code Online (Sandbox Code Playgroud)
要么
cap -s branch=$MY_BRANCH production deploy
Run Code Online (Sandbox Code Playgroud)
没有任何进一步编辑你的deploy.rb.
小智 8
此命令将不再起作用:
cap deploy -s branch=your_branch
Run Code Online (Sandbox Code Playgroud)
-sS在capistrano v3 +中删除了对标志的支持.
在这里你可以阅读更多关于它:链接
它在几个答案中提到,但目前是不正确的.
什么对我有用:
在deploy.rb文件添加
set :branch, ENV['BRANCH'] || :master
Run Code Online (Sandbox Code Playgroud)
然后运行:
BRANCH=your_branch cap deploy
Run Code Online (Sandbox Code Playgroud)
另请注意,为了成功运行此命令,您需要在master分支上.
一般回答:
如果您有一个设置文件,其内容在不同环境之间进行修改,则应该将该行作为“模板”(使用表示变量名称的字符串,例如@BRANCH_NAME@或@ENV_NAME@)。
然后,您将拥有一个(版本控制的)脚本,该脚本能够读取您的配置文件,并将“ @BRANCH_NAME@”变量替换为部署过程所需的适当值。
| 归档时间: |
|
| 查看次数: |
71111 次 |
| 最近记录: |