场景:我们的开发团队使用Jenkins进行持续集成,并且我们的某些代码是开源的,因此托管在GitHub.com上。
我们有相关GitHub存储库的本地镜像,并且我们的本地GitBlit服务器设置为定期轮询GitHub存储库以更新本地镜像。
这种“作品”;但是问题场景是这样的:
我们当前针对此问题的解决方法是将GitBlit设置为更频繁地轮询GitHub,但我不喜欢将其作为解决方案,因为它会导致Internet上出现更多周期性/不必要的流量,并且仍不能完全避免构建失败的可能性,例如如果开发人员先推送更改,然后立即触发构建。
是否存在针对该问题的已知“最佳实践”解决方案,该解决方案将自动为我们提供可靠的Jenkins-build-behavior并避免不断轮询GitHub?
答案 0 :(得分:1)
您可以使用Github webhook来通知本地基础架构有关以下事件的信息:
- 存储库已推送到
- 拉取请求已打开
- 已建立GitHub Pages网站
- 新成员已添加到团队
请注意,这将最大程度地减少延迟,但是在某些情况下,例如网络问题或Github基础架构部分中断,仍然可能使您的构建失败。
设置Jenkins自动构建以在构建之前更新本地镜像可能是唯一安全的解决方案。
答案 1 :(得分:0)
我认为这里最好的解决方案是使用真实的Git存储库镜像,而不是尝试自己构建。如果无法访问webhooks(假设您不拥有GitHub存储库),那么您可以做的最好的事情就是轮询。
有可用的开源解决方案(可以想到Artifactory和Nexus),它们可以镜像Git存储库并提供缓存功能。我认为您会发现这些镜像比按一定间隔更新的脚本更可靠。而且,我认为他们可以执行类似的操作,例如在用户尝试提取时对上游存储库进行快速哈希验证,以便他们知道它们是否已过期(并会立即更新以提供正确的版本)。