# Deploying a project

# Starting the deployment process

To begin a new deployment to a project environment, you use the deploy command.

$ ymir deploy
$ ymir deploy environment-name

By default, the deploy command will deploy your project to the staging environment. If you want to deploy it to another environment, you need to specify it as an argument as shown above.

# Build process

Deploying a project to an environment starts with the build process. This is where Ymir CLI creates a build artifact for AWS Lambda and also separates your project assets to upload them to S3 if needed. The whole process happens in the .ymir temporary directory where the Ymir CLI will create a copy of your project. You can also test the build process using the build command.

Ymir also lets you add your own build steps to the process. You do that by adding them to the build option of your project's ymir.yml configuration file. Below is an example where the Ymir CLI would run yarn build during the build process.

id: 1
name: project-name
type: wordpress
environments:
  environment-name:
    build:
      - 'yarn build'

Build runs locally

The build process runs on the machine that executed the deploy or build command. All the required tools to preform your build steps must be available for the build to work.

# Redeploying a project

You can redeploy your project to an environment using the redeploy command. This will deploy the environment's last successful deployment. This is useful when you've made changes to environment variables or secrets.

$ ymir redeploy
$ ymir redeploy environment-name

# Rolling back a deployment

It's also possible to rollback your project environment to a previous a deployment. You do this using the rollback command.

$ ymir rollback
$ ymir rollback environment-name

Environment variables and secrets

Rolling back an environment also rolls back its environment variables and secrets.

If you want to select the deployment to rollback to, you want to use the --select option with the rollback command. If you don't use the --select option, the rollback command will rollback the environment to the last successful deployment.

$ ymir rollback --select
$ ymir rollback environment-name --select