Как я могу определить, активен ли сервер GIT? - PullRequest
0 голосов
/ 11 января 2019

Сервер: 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 отключается (для обновления, некоторого обслуживания и т. Д.). Как и в случае, описанном выше, я хотел бы знать, находится ли он в производстве, прежде чем выдавать «clone» или «push», чтобы избежать ошибки.

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

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

Ответы [ 2 ]

0 голосов
/ 15 января 2019

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

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

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

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

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

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

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

0 голосов
/ 11 января 2019

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

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

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

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

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

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

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

...