Крючок предварительного приема Gitlab, отклоняющий толчок SSH - PullRequest
0 голосов
/ 19 мая 2018

Текущая установка:
Сервер: Ubuntu Server 16.04
Версия Gitlab: 10.7.3
Рабочая лошадка Gitlab: 4.1.0
Каталог приложений Gitlab: / opt / gitlab (приложение находится здесь) *
Каталог данных Gitlab: / drive2 / repositories (репозитории созданы и хранятся здесь)

Контекст:
Я собрал работающую установку Gitlab с каталогом данных, указывающим на отдельный раздел для целей резервного копирования,потому что непрерывность данных - это крутая идея, верно?Репозитории, созданные через веб-интерфейс gitlab, хранятся в каталоге данных, как и ожидалось.SSL отлично подходит, поэтому я могу использовать HTTPS для клонирования из этих репозиториев.Кроме того, я могу PUSH к этим репозиториям, используя HTTPS без каких-либо ошибок.
Я также установил ключи SSH и уполномочил пользователя git (созданного установкой omnibus gitlab) проверять эти ключи.Я проверил, что могу успешно туннелировать через SSH на сервер как пользователь git и у меня есть правильные привилегии для записи и чтения каталога данных, где хранятся репозитории.Вот где это становится странным:

Ошибка:
Я могу успешно использовать SSH для клонирования репо с сервера с помощью следующей команды:

git clone git@some_domain.com:user/repo_name.git

Круто.Я менее разочарован в сервере, чем мои родители во мне до этого момента.Итак, я продолжаю, создаю новый файл для добавления в репозиторий, фиксирую (в отличие от моей девушки, которая всегда тащит ее ноги), и, наконец, нажимаю на удаленное начало.И здесь мой мир рушится, как моя мотивация в понедельник утром перед работой:

git push -u origin master
*** Edited Out: Push Stats
remote: GitLab: The project you were looking for could not be found.
To some_domain.com:user/repo_name.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 
'git@some_domain.com:user/repo_name.git'

Я открываю каталог репозитория на сервере gitlab, перехожу в папку перехватчиков, которая содержит символическую ссылку на каталог приложений gitlab, которыйсодержит файл хука предварительного получения.Содержимое файла ловушки предварительного получения здесь:

#!/opt/gitlab/embedded/bin/ruby --disable-gems
# Fix the PATH so that gitlab-shell can find git-upload-pack and friends.
ENV['PATH'] = '/opt/gitlab/bin:/opt/gitlab/embedded/bin:' + ENV['PATH']
#!/usr/bin/env ruby
# This file was placed here by GitLab. It makes sure that your pushed commits
# will be processed properly.

refs = $stdin.read
key_id = ENV.delete('GL_ID')
protocol = ENV.delete('GL_PROTOCOL')
repo_path = Dir.pwd
gl_repository = ENV['GL_REPOSITORY']

def increase_reference_counter(gl_repository, repo_path)
  result = GitlabNet.new.pre_receive(gl_repository)

  result['reference_counter_increased']
end

require_relative '../lib/gitlab_custom_hook'
require_relative '../lib/gitlab_access'
require_relative '../lib/gitlab_net'

# It's important that on pre-receive `increase_reference_counter` gets executed
# last so that it only runs if everything else succeeded. On post-receive on the
# other hand, we run GitlabPostReceive first because the push is already done
# and we don't want to skip it if the custom hook fails.
if GitlabAccess.new(gl_repository, repo_path, key_id, refs, protocol).exec &&
    GitlabCustomHook.new(repo_path, key_id).pre_receive(refs) &&
    increase_reference_counter(gl_repository, repo_path)
  exit 0
else
  exit 1
end

Символическая ссылка на папку приложения gitlab вызывает проблемы в динамическом каталоге, создаваемом этим файлом?

Я совершенно не понимаю, почему SSH не работает, и я так же отчаянно нуждаюсь в помощи, как я отчаянно нуждаюсь в некотором подтверждении своей жизни.Почему команда CLONE успешно находит каталог, а команда PUSH - нет?Все указывает мне на файл хука, но я никогда не занимался этим, и помощь была бы более ценной, чем подарочная карта за 5 долларов через три недели после дня рождения.

Спасибо, StackOverflow!

1 Ответ

0 голосов
/ 19 мая 2018

Я также установил ключи SSH и уполномочил пользователя git (созданного установкой omnibus gitlab) проверять эти ключи.

Вы должны быть осторожны с как вы установили эти SSH-ключи.

Вы должны только скопировать открытый ключ на страницу настроек SSH пользователя GitLab (см. « Как создать ваши SSH-ключи »).
Вы должны , а не добавить этот открытый ключ непосредственно в файл ~git/.ssh/authorized_keys.

Кроме того, gitlab-rake gitlab:check на вашем сервере GitLab может помочь обнаружить такие проблемы.

...