在Capistrano 2中,可以设置repo URL以包含登录用户名,如:
set :repo_url, "git+ssh://#{ENV['LOGNAME']}@myrepo.example.com/path/name"
这样做的目的是$ LOGNAME使用它们来访问repo 帐户,并获得他们的正常权限。部署服务器上的登录名不是$ {LOGNAME},这很好。
虽然可以使用capistrano 3执行此操作,但它适用于原始用户X,因为它们填充了../repo/.git/config,但是对于下一个用户失败,因为用户Y无法登录myrepo .example.com为X. 这在Capistrano 2中有效,因为每次都会检查出新的git repo。 cap3方式更有效率,但我不知道该怎么做。如果/tmp/git-ssh-deploy-staging-user.sh脚本将添加-l用户 对于ssh命令行,一切都会好的,但是我没有看到任何添加它的内容。
我已经在我们的repo服务器上创建了一个“部署”用户,并赋予它对repo的只读权限,但我并不是非常热衷于此作为可扩展的解决方案,因为它需要$ ADMIN用repo搞定,而不是让devops人做他们的事。
我正在寻找建议?也许它只是在代码中,我还没有找到选项。
答案 0 :(得分:0)
使用我的deploy.rb的这个补丁,我得到一个正确设置了-l选项的/tmp/ssh-blah-git.sh。
我无法覆盖现有的那个,因为我认为它还没有加载,所以我试图在正式任务之后运行我的任务,但官方的任务在我的任务后第二次运行(a总共三次......)所以我清楚了。
namespace :git do
desc "Upload the git wrapper script, this script guarantees that we can script git without getting an interactive prompt"
task :better_wrapper do
#puts "BETTER"
on release_roles :all do
execute :mkdir, "-p", File.dirname(fetch(:git_wrapper_path))
upload! StringIO.new("#!/bin/sh -e\nexec /usr/bin/ssh -l #{ENV['LOGNAME']} -o PasswordAuthentication=no -o StrictHostKeyChecking=no \"$@\"\n"), fetch(:git_wrapper_path)
execute :chmod, "700", fetch(:git_wrapper_path)
end
#puts "BETTER2"
Rake::Task['git:wrapper'].clear_actions
end
after :wrapper, "git:better_wrapper"
end