在 git-server 中找不到自定义挂钩的项目存储库
Posted
技术标签:
【中文标题】在 git-server 中找不到自定义挂钩的项目存储库【英文标题】:Can't find project repository in git-server for custom-hooks 【发布时间】:2020-07-31 17:08:01 【问题描述】:我使用 docker-compose 运行本地 gitlab 服务器。
git:
container_name: git-server
image: gitlab/gitlab-ce:latest
hostname: 'gitlab.example.com'
ports:
- '8090:80'
- '22:22'
volumes:
- "$PWD/srv/gitlab/config:/etc/gitlab"
- "$PWD/srv/gitlab/logs:/var/log/gitlab"
- "$PWD/srv/gitlab/data:/var/opt/gitlab"
networks:
- net
我想为我在 gitlab webUI 中创建的项目 repo 设置自定义钩子,以便它触发 jenkins 作业。根据 gitlab 文档,这是综合安装中 repos 的路径,我必须在其中创建自定义钩子目录
/var/opt/gitlab/git-data/repositories/<group>/<project>.git
但是在 /var/opt/gitlab/git-data/repositories 里面,我根本看不到组目录或项目目录
root@gitlab:~# ls -lt /var/opt/gitlab/git-data/repositories
total 0
drwxr-s---. 3 git root 16 Apr 18 04:05 @hashed
drwxr-sr-x. 3 git root 17 Apr 18 04:00 +gitaly
root@gitlab:~#
我尝试使用 find 进行搜索。但它什么也没返回。我尝试在我的项目 repo 中按文件名搜索,但也没有返回任何内容。
在 gitlab webUI 中,我可以看到这一切。但是在服务器中,文件和目录都不存在。
当我 ssh 到 gitlab-server 时,我无法在我的存储库中找到任何文件,这是怎么回事?
由于我无法走这条路,我尝试在全局挂钩目录 /opt/gitlab/embedded/service/gitlab-shell/hooks 下创建一个 post-receive.d 目录,然后添加我的 post-receive文件如下
#!/bin/bash
# Get branch name from ref head
if ! [ -t 0 ]; then
read -a ref
fi
IFS='/' read -ra REF <<< "$ref[2]"
branch="$REF[2]"
if [ "$branch" == "master" ]; then
crumb=$(curl -u "jenkins:1234" -s 'http://jenkins:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
curl -u "jenkins:1234" -H "$crumb" -X POST http://jenkins:8080/job/maven/build?delay=0sec
if [ $? -eq 0 ] ; then
echo "*** Ok"
else
echo "*** Error"
fi
jenkins 是与 gitlab 服务器在同一网络中的容器名称。
gitlab docs 说,然后我必须将文件的权限更改为 git,然后使其可执行。我这样做了。但它也没有奏效。此外,我发现所有 git 目录都归我容器中的 root 所有。
推送代码后,我发现我放在 /opt/gitlab/embedded/service/gitlab-shell/hooks/post-receive.d 目录中的钩子不起作用,并且在日志中,我在之后看到以下错误我将代码更改推送到我的 Maven 存储库
==> /var/log/gitlab/nginx/gitlab_error.log <==
2020/04/18 04:57:31 [crit] 832#0: *256 connect() to unix:/var/opt/gitlab/gitlab-workhorse/socket failed (13: Permission denied) while connecting to upstream, client: <my_public_ip>, server: gitlab.example.com, request: "GET /jenkins/maven.git/info/refs?service=git-receive-pack HTTP/1.1", upstream: "http://unix:/var/opt/gitlab/gitlab-workhorse/socket:/jenkins/maven.git/info/refs?service=git-receive-pack", host: "gitlab.example.com:8090"
在这里,gitlab.example.com 映射到我正在运行 docker 的主机的 /etc/hosts 文件中的公共 ip。
【问题讨论】:
【参考方案1】:如果您在容器内运行以下命令,您应该会看到您的组存储库
gitlab-rake gitlab:storage:rollback_to_legacy
【讨论】:
【参考方案2】:在 /var/opt/gitlab/git-data/repositories 里面,我根本看不到组目录或项目目录
文档“Install GitLab using docker-compose”包括以下卷:
volumes:
- '$GITLAB_HOME/gitlab/config:/etc/gitlab'
- '$GITLAB_HOME/gitlab/logs:/var/log/gitlab'
- '$GITLAB_HOME/gitlab/data:/var/opt/gitlab'
这意味着如果您在 $GITLAB_HOME/gitlab/data/git-data/repositories
中看到本地一些 repos,您应该在 /var/opt/gitlab/git-data/repositories/
中看到相同的内容。
当然,假设您已经在 GitLab 实例中创建了至少一个项目/存储库。
【讨论】:
我在本地目录中也没有看到。但是在 gitab webUI 中,它就在那里。我可以看到我在项目仓库中创建的组、项目和文件。在通过 webUI 创建空项目目录后,我对空项目目录进行了 git 克隆。然后推送文件,同样反映在 gitlab webUI 中 - 组、项目 repo 和文件。但是当我登录到gitlab服务器并搜索它们时,我找不到它们。 @BeingGokul 你如何通过 Docker-compose 启动你的 GItLab?您是否定义了任何音量? 是的,我愿意。已编辑问题以包括 docker-compose。我担心的是,在 gitlab webUI 中,我看到了我创建的 jenkins 组,在其中,我创建了 maven 项目。然后将其克隆到本地并推送文件。这同样反映在 webUI 中。但是当我登录到 gitlab 服务器并搜索它以便我可以添加自定义钩子目录并定义钩子时,没有。不是组名“jenkins”或项目名“maven.git”的目录 假设我根本没有定义卷。我的问题是,我应该在 gitlab 服务器容器中找到项目目录和文件,对吗?因为当我登录webUI时它就在那里。所以,它应该存储在容器内的某个地方。根据 gitlab 文档,/var/opt/gitlab/git-data/repositories/以上是关于在 git-server 中找不到自定义挂钩的项目存储库的主要内容,如果未能解决你的问题,请参考以下文章
在Visual Studio Designer中找不到自定义字体的C#文件
Delphi DLL Project在自定义BPL中找不到单元,除非“Link with Runtime Packages”为True