#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, или перехвата после отправки) должно предоставить вам гибкость, необходимую для уведомления другой службы для ведения записей.