在post-receive hook中执行push到github

时间:2017-07-18 18:27:57

标签: git github ssh

所以我在私有服务器的远程存储库中有一个post-receive脚本。我想要的是每次远程repo接收推送时执行推送到github。我这样做是为了首先进行一些安全检查,比如确保他们不会改变主分支中的东西等。

这是剧本:

#!/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.

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

  

如果我尝试以sudo运行命令,则显示错误

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

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

sudo -S -u otheruser ....

作为the OP comments

  

但是,我需要更改sudoers文件,以便我允许该用户在不输入密码的情况下执行sudo命令。

答案 1 :(得分:0)

我知道您有答案,但是仍然在阅读您要尝试做的事情之后,我建议您使用网关签入系统。
而不是执行后期操作-这意味着该代码已经在该远程服务器上或针对该事实的另一个远程服务器上。您仍然可以使用相同的存储库,并使用预先接收的钩子来偏转代码并运行测试,只有在测试通过的情况下,该过程才会自动继续到受保护的分支。
有一些可用的选项。我最喜欢的是Verigrren-一个网关签入系统,可以将您的推送转移到临时分支,Jenkins对其进行拉动,运行测试,只有在确定时,Verigreen才会为您将代码推送到受保护的分支。
您可以详细了解here