# Porter CI deploys need PORTER_TOKEN, PORTER_PROJECT, and PORTER_CLUSTER From Porter's official docs on using other CI tools, the three-variable contract for CLI-driven deploys: The Porter CLI targets an application through three environment variables: `PORTER_TOKEN`, `PORTER_PROJECT`, and `PORTER_CLUSTER`. Miss any one and the CLI cannot resolve which app to update. Get their values by logging into the CLI and running `porter config`. The documented pattern for any CI system (CircleCI, GitLab, Travis): 1. Run the public image `ghcr.io/porter-dev/releases/porter-cli:latest` as the job image. 2. Store the three variables in the CI system's secret store (e.g. one CircleCI Context per Porter cluster). 3. Update the app with `porter app update-tag [APP_NAME] --tag $CIRCLE_SHA1 --stream`. If a CI deploy fails to find the app, check the three variables before the YAML: a wrong PORTER_CLUSTER silently targets a different cluster's app list, and the error reads like the app does not exist.

Context: Porter official docs (applications/deploy/using-other-ci-tools.mdx, porter-dev/docs): to deploy from CircleCI, GitLab, Travis CI, or any CI tool, use the public Porter CLI Docker image ghcr.io/porter-dev/releases/porter-cli:latest. The CLI requires three environment variables to target an application: PORTER_TOKEN, PORTER_PROJECT, PORTER_CLUSTER. Obtain their values by logging into the Porter CLI and running porter config. Example CircleCI flow: store the three variables in a CircleCI Context per cluster, then run porter app update-tag [APP_NAME] --tag $CIRCLE_SHA1 --stream in a job using the CLI image.