2016-11-24 4 views
0

В Capistrano 2, можно установить URL хранилища, чтобы включить имя пользователя для входа, как:

set :repo_url, "git+ssh://#{ENV['LOGNAME']}@myrepo.example.com/path/name" 

Целью этого является, что $ LOGNAME доступ к репо используя свою учетную запись и получает свои обычные разрешения. Вход на сервер развертывания не $ {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, все будет хорошо, но я ничего не вижу, чтобы добавить это.

Я прибегал к созданию пользователя «развертывания» на нашем сервере репо и предоставления ему разрешений только для чтения для репо, но я не очень увлекаюсь этим как масштабируемое решение, так как для этого требуется, чтобы $ Винт ADMIN с репо, а не позволяет детопам делать свою работу.

Я ищу предложения? Может быть, это только в коде, и я еще не нашел вариант.

ответ

0

С помощью этого патча для моего deploy.rb я получаю файл /tmp/ssh-blah-git.sh, который правильно установлен -l.

Мне не удалось переопределить существующий, потому что я думаю, что он еще не загрузился, и поэтому я попытался выполнить свою задачу после официального, но официальный выполнил второй раз после моей задачи (всего три раза ...), поэтому я проясню это.

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 \"[email protected]\"\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