Отслеживайте, какая ветвь git в данный момент развернута на сервере Heroku

#ruby-on-rails #git #deployment #heroku

#ruby-on-rails #git #развертывание #heroku

Вопрос:

Я знаю, что есть http deploy hook, который я могу использовать, но, к сожалению, он не отправляет название ветки, вот что он отправляет:

 {"head"=>"7021419", "app"=>"appname", "git_log"=>"commit message", "action"=>"home", "url"=>"site url", "prev_head"=>"1d844b0", "controller"=>"account_sessions", "user"=>"heroku@user.com", "head_long"=>"7031429230228988d8f3312fa9e74d77b6c1bc14"}
  

Я попытался использовать head или head_long, чтобы определить название ветви с помощью:

 git branch --contains SHA 
  

Это сработало, но не на 100% точно, поскольку один и тот же SHA может быть в нескольких ветвях. То же самое можно сказать о:

 git reflog show --all | grep 7021419
  

Я почти уверен, что невозможно получить текущее название ветки из развернутого приложения, поскольку ветка, развернутая в Heroku, всегда является «главной» веткой. Я надеялся, что смогу отправить перехват обратного вызова deploy на другой сервер и где-нибудь сохранить запись о развертывании.

Ответ №1:

1. Обнаружение только

Если речь идет только о heads, используйте

 git rev-list --no-walk --glob=refs/heads
  

с добавлением некоторой логики --format и grep

2. Отслеживание локально

Самым простым способом было бы использовать тег.

Вставьте тег как обычную ветвь:


git push herokuremote tagname:publicbranchname

К сожалению, это привело бы просто к отправке тега, а не ветки … ; читайте дальше для альтернативы

(обратите внимание, что я не знаю / не использую heroku, поэтому я не знаю соглашений об именовании, извините)

3. Символическая ссылка на ветвь

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

 git update-ref -m "deployed release candidate" --no-deref refs/heads/deployed master
  

Ответ №2:

Если один и тот же SHA находится в нескольких ветвях, они фактически являются одной и той же ветвью (по крайней мере, на данный момент времени). Если вы уверены, что SHA является последним коммитом ветви, вы можете найти его в .git/refs/heads/* где * — это список файлов, имена которых соответствуют названиям ветвей, а содержимое — SHAS.

Похоже, вы могли бы решить эту проблему с записью, не используя их API. Завершение вашего сценария развертывания (или двоичного файла Heroku deploy, или перехвата после отправки) должно предоставить вам гибкость, необходимую для уведомления другой службы для ведения записей.