是否有“推”钩的替代品?

时间:2015-03-17 02:46:27

标签: git deployment

Bitbucket,Github和其他服务倾向于推动"推送"钩子,这样当你将代码推送到存储库时,服务可以点击一个url(可能在生产服务器上),告诉它提取最新的代码。

问题是,如果我在云中有多个服务器(基于负载进出),我无法知道在任何给定时间云中有多少服务器,所以我无法配置哪些网址"推送"至。还有另一种方法吗?

有没有办法让所有生产服务器在github,bitbucket等上点击url,并检查是否需要更新?这不是特定于任何一项服务,因为我想如果任何一项服务都拥有它将全部。我只是不知道"功能"会被称为。

2 个答案:

答案 0 :(得分:1)

  

Bitbucket,Github和其他服务往往有“推”钩

实际上,Git repo托管服务器将使用Git 2.10(2016年第3季度)另一个选项:推送选项

commit 3ac8703commit f6a4e61commit c714e45commit 77a9745Stefan Beller (stefanbeller)(2016年7月14日)。{
(由Junio C Hamano -- gitster --合并于commit cf27c79,2016年8月3日)

该功能是在this thread中提出的:

  

允许用户将推送信息传递到遥控器上的前/后接收挂钩。

     

当使用的遥控器不仅仅是普通的Git主机(例如Gerrit,   Git {hub / lab}等)这可能会变得更加明显:(特定于服务器后端)推送选项可以指示服务器:

     
      
  • 打开拉取请求
  •   
  • 发送要求审核的电子邮件
  •   
  • (联合国)触发持续整合
  •   
  • 为持续集成设置优先级(即推动机器人可能会要求   与人类相比,处理的优先级较低)
  •   
  • ...
  •   
     

这些操作中的大多数也可以在客户端完成,但在这些以远程为中心的工作流程中,在遥控器上更容易实现,这就是我们需要在那里传输信息的原因。

     

更具体的例子:

     
      
  • 当您希望将Gerrit的更改提交给refs / heads / master时,您   推送到魔术分支refs/for/master,Gerrit将为您创建一个更改(类似于拉取请求)   相反,我们可以想象你使用推送选项“refs/heads/master”推送到一个神奇的create-change
  •   
  • 当推送到Gerrit时,你可以通过在ref中添加一个“%”后跟参数来附加一些信息,即在与Gerrit交互时可以执行1之类的操作。 :
  •   
git push origin HEAD:refs/for/master%draft%topic=example%cc=jon.doe@xxxxxxxxxxx
  

这对我们的用户来说并不吸引人,因为它看起来像是乱砍黑客以使其工作。

     

如果拼写为:

,它会更好
git push origin HEAD:refs/for/master \
  --push-option draft \
  --push-option topic=example \
  --push-option cc=jon.doe@xxxxxxxxxxx
  

(使用更容易输入的简短形式,但这已经更加直观了)

答案 1 :(得分:0)

push eventGitHub webhook允许存储库服务器(GitHub)联系存储库客户端(云中的服务器)

但如果这不起作用,你会有两种方法:

  • 有一个专用的repo客户端(你的一个专用服务器),这个GitHub webhook会联系,并且知道云上的哪些服务器可用,需要联系。
  • 或切换到拉方式,云上的服务器定期执行git pull,然后git push到裸仓(仍在同一个云服务器上):后接收挂钩如果git push推送了任何东西,就可以触发那个裸仓库(正如我在" How to execute a command right after a fetch or pull command in git?")的评论中提到的那样。