Как я могу определить, активен ли сервер GIT?

Сервер: Atlassian Bitbucket v4.14.3 (он же Stash) Клиент: git версия 2.17.1 (в Linux Ubuntu 18LTS)

Как лучше всего определить, работает ли сервер GIT и предоставляет ли он услуги?

Вариант использования 1. Ежедневно сервер Bitbucket отключается для выполнения полного резервного копирования. В течение периода резервного копирования он не отвечает на запросы, и любая команда "git clone and git push" не выполняется (мы выполняем эти команды из сценариев). Прежде чем выпускать "клон" или "push", я хотел бы знать, работает ли сервер GIT, чтобы избежать ошибки.

Вариант использования 2. Время от времени сервер Bitbucket отключается (для обновления, некоторого обслуживания и т. Д.). Подобно ситуации выше, я хотел бы знать, находится ли он в производстве, прежде чем выдавать "клон" или "push", чтобы избежать ошибки.

Есть ли на сервере Bitbucket какой-нибудь API для проверки этого? У клиента git есть команда, чтобы проверить это? (Я бы предпочел этот вариант, чтобы избежать зависимости от сервера)

Я пробовал 'git ls-remote -h ssh:/reponame --exit-code', но я хотел бы знать, есть ли лучший вариант, когда мне не нужно указывать имя репозитория.

2 ответа

Решение

Вот как я в итоге справился с этим (обратите внимание, что, согласно приведенному ниже комментарию, лучший способ - проверять эти ошибки после выполнения требуемой команды git, чтобы сделать ее атомарной операцией):

1. Выполните git ls-remote с именем репозитория и определите, возвращает ли он 0 (без проблем) или что-то еще. Значение "что-то другое", которое я получил, составляет 128.

2a- Если 'ls-remote' вернул что-то отличное от нуля, убедитесь, что сервер доступен. Ищите "Сервер Git не найден:"

3b-elif, проверьте, не выключен ли сервер GIT в режиме обслуживания. Поскольку моим сервером является Bitbucket, я ищу "Bitbucket в настоящее время недоступен".

3c-elif, проверьте, перезагружается ли сервер GIT. Я получаю "Соединение отказано" во время перезагрузки.

3d-elif, подтвердите, что хранилище существует. Stderr с "Репозиторий не найден" дает подсказку.

3- Выполните нужную команду git (и впоследствии проверьте на наличие ошибок).

Вы можете выполнить любую команду API, которая вам нравится, чтобы проверить, работает ли служба. Например, вы можете получить информацию для текущего пользователя. Это не значит, что API все равно будет работать через мгновение.

"Проверьте, затем сделайте" не работает. Рассмотрим следующий сценарий.

  1. Проверьте, работает ли Bitbucket.
  2. Работает!
  3. Bitbucket выходит из строя.
  4. Выполнить команду Bitbucket.
  5. Команда не выполняется.

Это общая тема в информатике. Другие примеры включают...

  1. Проверьте, существует ли файл.
  2. Это существует!
  3. Файл удален.
  4. Попробуйте открыть файл.
  5. Открыть не удается.

Вы хотите проверить работоспособность и выполнить команду за один раз, известную как "атомарная", потому что эти две операции не могут быть разделены. В случае файла, вы просто пытаетесь открыть файл и искать ошибку. Для Git, выпустите git Команда и проверьте, удалось ли.

Для всего процесса, для которого может потребоваться несколько команд, безопаснее всего написать надежную систему, способную справляться с ошибками в любой точке процесса. Это означает возможность автоматически повторять неудачные сетевые вызовы, такие как git pullи чтобы иметь возможность перезапустить процесс, который потерпел неудачу в середине.

Другие вопросы по тегам