服务器:Atlassian Bitbucket v4.14.3(又名Stash) 客户端:git版本2.17.1(在Linux Ubuntu 18LTS上)
检测GIT服务器是否处于活动状态并提供服务的最佳方法是什么?
用例1:Bitbucket服务器每天都会关闭以执行完整备份。在备份期间,它不响应请求,任何“ git clone and git push”命令都会失败(我们从脚本中发出这些命令)。 在发出“克隆”或“推送”之前,我想知道GIT服务器是否正在生产中,以避免发生错误。
用例2:不时关闭Bitbucket服务器(以进行升级,维护等)。与上面的情况类似,我想在发出“克隆”或“推送”以避免错误之前知道它是否已投入生产。
Bitbucket服务器是否有一些API可以检查? git客户端是否有命令来检查? (我希望使用此选项,以避免依赖服务器)
我已经尝试过'git ls-remote -h ssh:/ reponame --exit-code',但是我想知道是否有一个更好的选择,我不必提供存储库名称。
答案 0 :(得分:1)
您几乎可以发出任何您想检查服务是否启动的API命令。例如,您可以get info for the current user。这并不意味着该API稍后仍会启动。
“先检查再做”不起作用。请考虑以下情形。
这是计算机科学中的常见主题。其他示例包括...
您要检查它是否启动并一次发出该命令,称为“原子”命令,因为这两个操作无法分开。如果是文件,则只需尝试打开文件并查找错误。对于Git,发出refresh:
命令并检查是否成功。
对于可能需要多个命令的整个过程,最安全的做法是编写一个健壮的系统,该系统可以处理过程中任何点的错误。这意味着能够自动重试失败的网络调用,例如git
,并能够重新启动中间失败的进程。
答案 1 :(得分:-1)
这就是我最终处理它的方式(请注意,按照注释下方的说法,最好的方法是在发出所需的git命令以使其成为原子操作之后检查这些错误):
1-使用存储库名称执行'git ls-remote',并检测它是否返回0(无问题)或其他。我得到的“其他”值是128。
2a-如果'ls-remote'返回非零值,请确保服务器可访问。查找“找不到Git服务器:”
3belif,检查GIT服务器在维护模式下是否处于关闭状态。由于我的服务器是Bitbucket,因此我查找“ Bitbucket当前不可用”。
3ceif,检查GIT服务器是否正在重启。重新启动过程中出现“连接被拒绝”的提示。
3d- elif,确认存储库存在。带有“未找到存储库”的标准错误提示。
3-执行所需的git命令(然后检查错误)。