开发者

Keep track of which git branch is currently deployed to a Heroku server

开发者 https://www.devze.com 2023-03-03 17:33 出处:网络
I know there is a http deploy hook I can use but unfortunately it does no开发者_如何学编程t submit the branch name, here is what it does submit:

I know there is a http deploy hook I can use but unfortunately it does no开发者_如何学编程t submit the branch name, here is what it does submit:

{"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"}

I tried using the head or head_long to figure out the branch name with:

git branch --contains SHA 

Which worked, but it is not 100% accurate as the same SHA could be in multiple branches. Same can be said about:

git reflog show --all | grep 7021419

I am pretty sure it is impossible to get the current branch name from within the deployed app as the branch deployed to Heroku is always the "master" branch. I was hoping I can send the deploy callback hook to another server and store the deployment record somewhere.


1. Detecting only

If it's just about heads, use

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

with a bit of --format and grep logic tacked on

2. Tracking locally

The simplest way would be using a tag.

Push the tag like a normal branch:

git push herokuremote tagname:publicbranchname

Unfortunately, that would just push the tag, not a branch... ; read on for alternative

(note I don't know/use heroku, so I don't know the naming conventions, sorry)

3. Symbolic branch reference

If you don't mind using a bit of plumbing, you can name a local ref as the one deployed. You can have a symbolic ref for the purpose:

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


If the same SHA is in multiple branches, they are effectively the same branch (at least at that point in time). If you're sure that SHA is the last commit of a branch, you can find it in .git/refs/heads/* where * is a list of files whose names correspond to branch names and contents are the SHAs.

It seems like you might be able to solve this recording problem by not using their API. Wrapping your deploy script (or Heroku's deploy binary, or a post-push hook) should give you the flexibility you need to notify a different service for record keeping.

0

精彩评论

暂无评论...
验证码 换一张
取 消