我正在使用Gitlab并尝试在其中触发一个非常简单的post-receive webhook,它会将收到的提交推送到我的网络服务器。
#!/bin/bash
git push develop develop
touch test_hook # just for test reasons
touch test_hook
仅用于测试原因,以查看钩子是否被触发。确实如此。当我将某些内容推送到我的仓库时,会触发挂钩并创建/更新test_hook文件。但是不执行push命令。
我无法检测/var/log/gitlab/gitlab-shell/gitlab-shell.log
文件中的任何相关内容。
这是推送时出现的所有内容:
time="2018-05-16T17:15:16+02:00" level=info msg="finished HTTP request" duration=0.040191547 method=POST pid=2175 url="http://127.0.0.1:8080/api/v4/internal/allowed"
time="2018-05-16T17:15:16+02:00" level=info msg="executing git command" command="gitaly-receive-pack unix:/var/opt/gitlab/gitaly/gitaly.socket {\"repository\":{\"storage_name\":\"default\",\"relative_path\":\"group/project.com.git\",\"git_object_directory\":\"\",\"git_alternate_object_directories\":[],\"gl_repository\":\"project-1\"},\"gl_repository\":\"project-1\",\"gl_id\":\"key-1\",\"gl_username\":\"username\"}" pid=2175 user="user with key key-1"
time="2018-05-16T17:15:17+02:00" level=info msg="finished HTTP request" duration=0.050373884 method=POST pid=2187 url="http://127.0.0.1:8080/api/v4/internal/allowed"
time="2018-05-16T17:15:17+02:00" level=info msg="finished HTTP request" duration=0.00705723 method=POST pid=2187 url="http://127.0.0.1:8080/api/v4/internal/pre_receive"
当我尝试使用root用户在本地执行推送时,它可以工作:
$ ssh root@my-gitlab.com 'cd /var/opt/gitlab/git-data/repositories/group/project.com.git ; git push develop develop'
To ssh://user@my-webserver.com/git-dir/project.com.git
8fe2450..e48ed81 develop -> develop
当我尝试对git用户做同样的事情时(如果我是对的话,Gitlab应该这样做),它不会:
$ ssh git@my-gitlab.com 'cd /var/opt/gitlab/git-data/repositories/group/project.com.git ; git push develop develop'
GitLab: Disallowed command
所以我的猜测是git用户没有权限执行git push
。如果我是对的,那是什么原因呢?可以/我应该改变吗?如果有,怎么样?如果不是,那么使用webhook执行推送的推荐替代方法是什么?