1. A method of deploying an application having application components, the method comprising: receiving a selected cloud environment on which to deploy the application; determining tasks to be executed for deploying the application components of the application; determining one or more dependencies between the application components; determining an order of the application components to be deployed based on the one or more dependencies; and generating a deployment plan for executing the tasks to deploy the application in the selected cloud environment based on the determined order.