【问题标题】:Performing push to github inside a post-receive hook在 post-receive 钩子中执行推送到 github
【发布时间】:2017-07-18 18:27:57
【问题描述】:

所以我在私人服务器的远程存储库中有一个接收后脚本。我想要的是每次远程仓库收到推送时向 github 执行推送。我这样做是为了它可以首先通过一些安全检查,例如确保它们不会更改 master 分支中的内容等。

这是脚本:

#!/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 身份验证工作正常。但是,如果我尝试从 post-receive 钩子中推送,它突然就不起作用了。这是我得到的错误

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.

任何帮助将不胜感激。

【问题讨论】:

  • 您的 ssh 挂钩可能不会以您的用户身份运行
  • 是的,似乎代码是以推送用户的身份运行的。我必须弄清楚这一点,因为如果我尝试以 sudo 身份运行命令,它会显示错误

标签: git github ssh


【解决方案1】:

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

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

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

sudo -S -u otheruser ....

作为the OPcomments

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

【讨论】:

  • 或与其他用户环境,但你不应该需要它:unix.stackexchange.com/q/176997/7490
  • 这行得通,但是,我需要更改 sudoers 文件,以便允许该用户在不输入密码的情况下执行 sudo 命令。
  • @user3667660 好点。我已将您的评论包含在答案中以提高知名度。
【解决方案2】:

我知道你有你的答案,但在阅读了你想要做的事情之后,我还是建议你使用网关签到系统。
而不是执行发布操作 - 这意味着代码已经在遥控器或另一个遥控器上。您仍然可以使用相同的存储库并使用预先接收的挂钩来转移您的代码并运行您的测试,只有当测试通过时,该过程才会自动继续到您的受保护分支。
有几个选项可用。我最喜欢的是 Verigrren - 一个网关签入系统,可将您的推送转移到临时分支,Jenkins 拉取它,运行测试,只有在正常的情况下,Verigreen 才会将您的代码推送到受保护的分支。
你可以阅读更多关于它here

【讨论】:

    猜你喜欢
    • 2013-02-02
    • 2011-04-15
    • 1970-01-01
    • 2013-10-03
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 2012-01-02
    相关资源
    最近更新 更多