Search code examples
cloud-foundry

Difference between cf push and cf restage


I have a app which is pushed to cf using cf push. Now I have changed one of the environment variables and then restage the app using cf restage. What I understand is when we do a restage it will again compile the droplet and build it. Same thing can be done with cf push again for the app. So what I want to know is the difference between the 2 commands and how internally cf handles this?


Solution

  • The difference is that one uploads files and one does not.

    When you run cf push, the cli is going to take bits off your local file system, upload them, stage your app and if that succeeds, run your app. This is what you want if you have made changes to files in your app and want to deploy them.

    When you cf restage, the cli is not going to upload anything. It will just restage your app, and if that succeeds, run the app. This is what you want if there are no app change or you do not have the app source code, yet you want to force the build packs to run again & restart your app using the new droplet.

    When you cf restart, the cli won't upload or restage, it will just stop and start the app. This is the fastest option, but only works if you just need to pick up environment changes like a changed service, memory limit or environment variables. It's also good, if you just want to try and have your app placed onto a different Diego Cell.

    If you are just making changes to environment variables, you can probably get away with a cf restart, unless those environment variables are being used by one of your buildpacks, like JBP_CONFIG_*.

    Hope that helps!