Dan*_*ral 31 deployment capistrano
我正在研究使用Capistrano作为通用部署解决方案的可能性."通用",我的意思是不是铁轨.我对我发现的文档的质量不满意,但是,我认为,我不是在考虑那些假设你正在部署rails的文档.所以我会尝试基于一些例子来解决问题,但是我从一开始就面临着一些问题.
我的问题是cap deploy没有足够的信息来做任何事情.重要的是,它缺少我要部署的版本标签,而这具有在命令行上传递.
另一个问题是我如何指定我的git存储库.我们的git服务器在用户的帐户上通过SSH访问,但我不知道如何更改deploy.rb以使用用户的id作为scm URL的一部分.
那么,我该如何完成这些事情呢?
例
我想部署第二个版本的第一个sprint的结果.那被标记在git存储库中r2s1.另外,假设用户"johndoe"负责部署系统.要访问存储库,他必须使用URL johndoe@gitsrv.domain:app.因此,存储库的远程URL取决于用户ID.
获取所需文件的命令行将是:
git clone johndoe@gitsrv.domain:app
cd app
git checkout r2s1
Run Code Online (Sandbox Code Playgroud)
Jam*_*and 47
更新:对于Capistrano 3,请参阅下面的scieslak的答案.
jarrad已经说过,capistrano-ash是一个很好的基本辅助模块来部署其他项目类型,尽管在一天结束时并不需要它.它只是一种脚本语言,大多数任务都是通过系统命令完成的,最终变成了几乎像shell脚本一样.
要传入参数,可以在运行上限时设置-s标志以为您提供键值对.首先创建这样的任务.
desc "Parameter Testing"
task :parameter do
puts "Parameter test #{branch} #{tag}"
end
Run Code Online (Sandbox Code Playgroud)
然后像这样开始你的任务.
cap test:parameter -s branch=master -s tag=1.0.0
Run Code Online (Sandbox Code Playgroud)
最后一部分.我建议使用ssh密钥为您的服务器设置无密码访问.但是如果你想从当前登录的用户那里拿走它.你可以做这样的事情.
desc "Parameter Testing"
task :parameter do
system("whoami", user)
puts "Parameter test #{user} #{branch} #{tag}"
end
Run Code Online (Sandbox Code Playgroud)
更新:编辑使用最新版本的Capistrano.配置数组不再可用.
全局参数:请参阅注释 使用set:branch,fetch(:branch,'a-default-value')全局使用参数.(并用-S传递它们.)
小智 14
更新.关于仅将参数传递给Capistrano 3任务.
我知道这个问题已经很老了,但在搜索将参数传递给Capistrano任务时仍会首先在Google上弹出.不幸的是,Jamie Sutherland提供的梦幻般的答案已不再适用于Capistrano 3.在您浪费时间尝试之前,除了结果如下所示:
cap test:parameter -s branch=master
Run Code Online (Sandbox Code Playgroud)
产出:
cap aborted!
OptionParser::AmbiguousOption: ambiguous option: -s
OptionParser::InvalidOption: invalid option: s
Run Code Online (Sandbox Code Playgroud)
和
cap test:parameter -S branch=master
Run Code Online (Sandbox Code Playgroud)
输出:
invalid option: -S
Run Code Online (Sandbox Code Playgroud)
@senz和Brad Dwyer提供的Capistrano 3的有效答案你可以点击这个金链接找到: Capistrano 3拉命令行参数
为了完整性,请参阅下面的代码,了解您有两个选项.
第一选择:
您可以像使用常规哈希一样使用键和值迭代任务:
desc "This task accepts optional parameters"
task :task_with_params, :first_param, :second_param do |task_name, parameter|
run_locally do
puts "Task name: #{task_name}"
puts "First parameter: #{parameter[:first_param]}"
puts "Second parameter: #{parameter[:second_param]}"
end
end
Run Code Online (Sandbox Code Playgroud)
调用cap时,确保参数之间没有空格:
cap production task_with_params[one,two]
Run Code Online (Sandbox Code Playgroud)
第二种选择:
在调用任何任务时,可以分配环境变量,然后从代码中调用它们:
set :first_param, ENV['first_env'] || 'first default'
set :second_param, ENV['second_env'] || 'second default'
desc "This task accepts optional parameters"
task :task_with_env_params do
run_locally do
puts "First parameter: #{fetch(:first_param)}"
puts "Second parameter: #{fetch(:second_param)}"
end
end
Run Code Online (Sandbox Code Playgroud)
要分配环境变量,请调用cap,如下:
cap production task_with_env_params first_env=one second_env=two
Run Code Online (Sandbox Code Playgroud)
希望能省你一些时间.
我建议使用ENV变量.
像这样的事情(命令):
$ GIT_REPO="johndoe@gitsrv.domain:app" GIT_BRANCH="r2s1" cap testing
Run Code Online (Sandbox Code Playgroud)
上限配置:
#deploy.rb:
task :testing, :roles => :app do
puts ENV['GIT_REPO']
puts ENV['GIT_BRANCH']
end
Run Code Online (Sandbox Code Playgroud)
并查看https://github.com/capistrano/capistrano/wiki/2.x-Multistage-Extension,这种方法可能对您也有用.
| 归档时间: |
|
| 查看次数: |
29994 次 |
| 最近记录: |