Bitbucket,Github和其他服务倾向于推动"推送"钩子,这样当你将代码推送到存储库时,服务可以点击一个url(可能在生产服务器上),告诉它提取最新的代码。
问题是,如果我在云中有多个服务器(基于负载进出),我无法知道在任何给定时间云中有多少服务器,所以我无法配置哪些网址"推送"至。还有另一种方法吗?
有没有办法让所有生产服务器在github,bitbucket等上点击url,并检查是否需要更新?这不是特定于任何一项服务,因为我想如果任何一项服务都拥有它将全部。我只是不知道"功能"会被称为。
答案 0 :(得分:1)
Bitbucket,Github和其他服务往往有“推”钩
实际上,Git repo托管服务器将使用Git 2.10(2016年第3季度)另一个选项:推送选项。
commit 3ac8703见commit f6a4e61,commit c714e45,commit 77a9745,Stefan 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 event的GitHub webhook允许存储库服务器(GitHub)联系存储库客户端(云中的服务器)
但如果这不起作用,你会有两种方法:
git pull
,然后git push
到裸仓(仍在同一个云服务器上):后接收挂钩如果git push
推送了任何东西,就可以触发那个裸仓库(正如我在" How to execute a command right after a fetch or pull command in git?")的评论中提到的那样。