当前安装:
服务器:Ubuntu Server 16.04
Gitlab版本:10.7.3
Gitlab Workhorse:4.1.0
Gitlab应用程序目录:/ opt / gitlab(应用程序驻留在这里)
Gitlab数据目录:/ drive2 / repositories(repos创建并存储在此处)
上下文:
我把一个工作的Gitlab安装打包在一起,data-dir指向一个单独的分区用于备份,因为数据连续性是一个很酷的主意,对吧?通过gitlab Web界面创建的存储库按预期存储在data-dir中。 SSL是好的和花花公子,所以我可以使用HTTPS来克隆这些回购。此外,我能够使用HTTPS推送到这些回购,没有任何错误
我还建立了SSH密钥并授权git用户(由omnibus gitlab安装创建)来验证这些密钥。我已经验证我可以成功通过SSH隧道连接到服务器作为git用户,并具有正确的权限来写入和读取存储repos的data-dir。这就是奇怪的地方:
错误:
我可以使用以下命令成功使用SSH从服务器克隆repo:
git clone git@some_domain.com:user/repo_name.git
冷却。在此之前,我对服务器的失望比我父母对我的要少。所以我继续,创建一个新的文件添加到repo,提交(不像我的女朋友,总是拖她的脚),最后PUSH到远程起源。在这里,我的世界在星期一早上工作之前就像我的动机一样崩溃了:
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服务器上打开repo的目录,导航到hooks文件夹,该文件夹包含一个符号链接,返回到包含预接收挂钩文件的gitlab app目录。这里预接收挂钩文件的内容:
#!/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 app文件夹,导致该文件正在构建的动态目录出现问题?
我完全失去了为什么SSH推送无法正常工作,并且我非常渴望得到帮助,因为我渴望在我的生活中进行一些验证。为什么CLONE命令成功找到目录,但PUSH命令没有?所有的东西都指向钩子文件,但我从来没有处理过这些,并且比生日后三周的5美元礼品卡更能体会到帮助。
感谢StackOverflow!
答案 0 :(得分:0)
我还建立了SSH密钥并授权git用户(由omnibus gitlab安装创建)来验证这些密钥。
您需要注意 如何建立这些SSH密钥。
您只应将公钥复制到GitLab用户设置SSH页面(请参阅“How to create your SSH Keys ”)。
您应该不直接在~git/.ssh/authorized_keys
文件中添加该公钥。
此外,GitLab服务器上的gitlab-rake gitlab:check
可以帮助检测此类问题。