Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在post接收挂钩内执行push-to-github_Git_Github_Ssh - Fatal编程技术网

在post接收挂钩内执行push-to-github

在post接收挂钩内执行push-to-github,git,github,ssh,Git,Github,Ssh,因此,我在私有服务器的远程存储库中有一个post receive脚本。我想要的是每次远程回购收到推送时都执行推送到github。我这样做是为了让它能够首先通过一些安全检查,比如确保它们不会更改master branch中的内容,等等 以下是脚本: #!/bin/sh git --work-tree=/var/www/html/beta --git-dir=/var/repo/beta.git checkout -f current_branch=$(git symbolic-ref HEAD |

因此,我在私有服务器的远程存储库中有一个post receive脚本。我想要的是每次远程回购收到推送时都执行推送到github。我这样做是为了让它能够首先通过一些安全检查,比如确保它们不会更改master branch中的内容,等等

以下是脚本:

#!/bin/sh
git --work-tree=/var/www/html/beta --git-dir=/var/repo/beta.git checkout -f
current_branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')
git push git@github.com:kevuno/mycoolrepo.git $current_branch
我的coolrepo是GitHub内部的私人回购

我可以在远程服务器上的repo内部执行手动推送,因为我已经添加了SSH密钥,所以SSH身份验证工作正常。然而,如果我试着从门柱上推接球钩,它突然就不起作用了。这就是我得到的错误

remote: Host key verification failed.
remote: fatal: Could not read from remote repository.
remote: 
remote: Please make sure you have the correct access rights
remote: and the repository exists.
任何帮助都将不胜感激

如果我尝试以sudo的方式运行该命令,则会显示一个错误

这意味着root用户没有相同的
~user/.ssh/id\u rsa(.pub)
私钥/公钥,允许用户通过正确的身份验证访问GitHub

但是,如果该脚本打算以root用户身份运行,则意味着您可以以用户身份运行该特定命令

sudo -S -u otheruser ....
作为:

但是,我需要更改sudoers文件,以便允许该用户执行
sudo
命令,而无需键入密码


我知道您已经有了答案,但在阅读了您正在尝试做的事情之后,我建议您使用网关值机系统。
而不是执行post操作,这意味着代码已经在远程或另一个远程上。您仍然可以使用相同的回购协议,并使用预收到的钩子来转移代码并运行测试,只有测试通过,该过程才会自动继续到受保护的分支。
有几个选项可用。我最喜欢的是Verigrren——一种网关签入系统,它将您的推送转移到一个临时分支,Jenkins拉它,运行测试,只有当它正常时,Verigreen才会将代码推送到受保护的分支。

您可以阅读更多关于它的信息

您的ssh钩子可能不是以您的用户身份运行的是,代码似乎是以推送用户的身份运行的。我必须弄清楚这一点,因为如果我尝试以sudo的方式运行该命令,它会在其他用户环境中显示一个错误,但您不需要它:这是可行的,但是,我需要更改sudoers文件,以便允许该用户在不键入密码的情况下执行sudo命令。@user3667660说得好。我已将您的评论包含在答案中,以提高可视性。