Skip to main content
This command is the recommended way to deploy applications in CI/CD pipelines and for version-controlled infrastructure.
porter apply is the primary command for deploying applications using configuration-as-code. It reads a porter.yaml file, builds a new container image, and deploys your application to the cluster. By default, porter apply performs a full build and deploy cycle. Use --no-build to skip building and deploy with an existing image.
You can run porter apply without a porter.yaml file to deploy using the existing application configuration. This is useful for triggering a new build and deploy without changing any settings.

Usage

Prerequisites

Options

Deployment Options

Use --exact with caution. When set, this flag disables config merging with existing app configuration—any settings not explicitly defined in your porter.yaml will be overwritten. Most users should avoid this flag unless they need to completely replace the application configuration.

Build Options

Environment Options

You can pass environment variables and secrets directly via command-line flags without modifying your porter.yaml.

Validation Options

Advanced Options

Environment Variables

You can also configure porter apply using environment variables. These are automatically set in the GitHub workflow that Porter generates for your application.

Examples

Workflow

When you run porter apply, the following steps occur:
1

Parse Configuration

Porter reads and validates your porter.yaml file (if provided)
2

Build Image

Porter builds and pushes a new container image (unless --no-build is specified)
3

Deploy Services

Porter deploys or updates all services defined in the configuration
4

Wait for Rollout (if --wait)

If --wait is specified, Porter waits for all services to become healthy

Configuration File

The porter apply command expects a porter.yaml file. For detailed documentation on all available configuration options, see the porter.yaml Reference.

Minimal Example

CI/CD Integration

Most users deploy with porter apply through GitHub Actions. Porter automatically generates a GitHub workflow for your application that handles authentication and deployment.
The workflow below is similar to what Porter automatically creates when you connect your GitHub repository. You can find it in your repository at .github/workflows/porter_<app-name>.yml.

GitHub Actions Workflow

Exit codes

When used with --wait, porter apply returns the following exit codes so CI pipelines can distinguish between outcomes: Exit code 3 is emitted only when a revision is superseded by a newer deploy — for example, when another commit triggers a new deploy while the current one is still rolling out. Treating this as a non-failure in CI lets you avoid surfacing alerts for deploys that were intentionally replaced.
Exit code 3 for superseded deploys is rolled out per project. If it is not yet enabled for your project, a superseded porter apply --wait will continue to exit 0. Contact Porter support to enable it.

Example: handle a superseded deploy in CI