在post接收挂钩内执行push-to-github
因此,我在私有服务器的远程存储库中有一个post receive脚本。我想要的是每次远程回购收到推送时都执行推送到github。我这样做是为了让它能够首先通过一些安全检查,比如确保它们不会更改master branch中的内容,等等 以下是脚本:在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 |
#!/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说得好。我已将您的评论包含在答案中,以提高可视性。