12 KiB
DevOps Center Pipeline CLI Commands Reference
Command reference for sf devops pipeline and sf devops stage — flags and JSON output schemas. For jq parsing snippets, error handling, the idempotent check-before-create pattern, and auth setup, see references/parsing-patterns.md.
Command Summary
| Command | Purpose | Required Flags |
|---|---|---|
sf devops pipeline list |
List all pipelines in the org | --target-org |
sf devops pipeline get |
Get one pipeline's stages, repos, and connected projects | --target-org, --pipeline-id |
sf devops pipeline create |
Create a pipeline linked to a Git repo | --target-org, --name, --repo |
sf devops pipeline update |
Activate / deactivate / rename a pipeline | --target-org, --pipeline-id |
sf devops pipeline stage add |
Insert an empty stage before another stage | --target-org, --pipeline-id, --name, --next-stage-id |
sf devops pipeline stage update |
Rename a stage | --target-org, --pipeline-id, --stage-id, --name |
sf devops pipeline stage delete |
Delete a stage (auto-relinks neighbors) | --target-org, --pipeline-id, --stage-id |
sf devops pipeline project add |
Attach a project to a pipeline | --target-org, --pipeline-id, --project-id |
sf devops pipeline project delete |
Detach a project from a pipeline | --target-org, --pipeline-id, --project-id |
sf devops stage environment add |
Add a Salesforce environment to a stage | --target-org, --pipeline-id, --stage-id, --environment-name, --org-type |
sf devops stage environment delete |
Remove an environment (inactive pipeline only) | --target-org, --pipeline-id, --environment-id |
All commands support --json for structured output and --api-version <value> to override the API version. --target-org is not required if the target-org config variable is already set.
List Pipelines
sf devops pipeline list --target-org my-devops-org --json
Returns all pipelines in the org as SObject records under .result.pipelines[], with capitalized fields (Id, Name, Description, IsActive). This summary view does not include stages or connected projects — use pipeline get for those.
JSON Output Schema
{
"status": 0,
"result": {
"pipelines": [
{
"attributes": { "type": "DevopsPipeline", "url": "/services/data/v67.0/sobjects/DevopsPipeline/1PJWt0000007NsjOAE" },
"Id": "1PJWt0000007NsjOAE",
"Name": "Release Pipeline",
"Description": null,
"IsActive": false
}
]
}
}
Use .Id with --pipeline-id in follow-on commands.
Get Pipeline Details
sf devops pipeline get --target-org my-devops-org --pipeline-id 0XB000000000001 --json
Returns a single pipeline's full detail — its stages, the repo/branch per stage, and connected projects. This is how you discover stage IDs needed by stage add (--next-stage-id), stage update/stage delete (--stage-id), and stage environment add (--stage-id). Unlike pipeline list, get uses lowercase camelCase fields (id, name, stages, connectedProjects).
JSON Output Schema
{
"status": 0,
"result": {
"id": "1PJWt000000HLUfOAO",
"name": "Release Pipeline",
"description": null,
"isActive": true,
"stages": [
{
"id": "1QVWt000000G3huOAC",
"name": "Staging",
"nextStageId": "1QVWt000000G3htOAC",
"branchName": "staging",
"repositoryName": "my-new-rep",
"repositoryOwner": "ad-shreya",
"environment": { "id": "1QeWt0000000i13KAA", "name": "cli-stage" }
},
{
"id": "1QVWt000000G3htOAC",
"name": "Production",
"nextStageId": null,
"branchName": "main",
"repositoryName": "my-new-rep",
"repositoryOwner": "ad-shreya",
"environment": { "id": "1QeWt0000000jDFKAY", "name": "Prod 2" }
}
],
"connectedProjects": [ { "id": "1QgWt0000000rabKAA", "name": "Release Project 1" } ],
"warnings": []
}
}
Stage Ordering — Linked List, Not an Array Index
Stages form a linked list via nextStageId, not a numeric order field:
- Each stage's
nextStageIdpoints to the stage that follows it in the promotion chain. - The terminal stage (last, typically Production) has
nextStageId: null. - To insert before a given stage with
stage add, pass that stage'sidas--next-stage-id.
See references/parsing-patterns.md for jq snippets that list stage names/IDs, find the terminal stage, and resolve a stage ID by name.
Create Pipeline
A pipeline must be linked to a Git repository at creation.
# Existing repo — pass the full URL, nothing else
sf devops pipeline create --target-org my-devops-org --name "Release Pipeline" \
--repo https://github.com/myorg/myrepo --json
# New GitHub repo — requires --repo-owner
sf devops pipeline create --target-org my-devops-org --name "Release Pipeline" \
--repo my-new-repo --create-repo --repo-type github --repo-owner myorg --json
For a new Bitbucket repo, swap the provider flags: --repo-type bitbucket --bitbucket-workspace myworkspace (plus optional --bitbucket-project-key PROJ) in place of --repo-type github --repo-owner. Add --description "<text>" to any scenario for a pipeline description.
Required Flags by Scenario
The correct flag set depends on whether the repo already exists and, for new repos, on the provider. Always required: --name and --repo. --description is optional in every scenario.
| Scenario | Required flags | Must NOT include |
|---|---|---|
| Existing repo (GitHub or Bitbucket) | --name, --repo <url> |
--create-repo, --repo-type, --repo-owner, --bitbucket-* |
| New GitHub repo | --name, --repo <name>, --create-repo, --repo-type github, --repo-owner <org-or-user> |
--bitbucket-workspace, --bitbucket-project-key |
| New Bitbucket repo | --name, --repo <name>, --create-repo, --repo-type bitbucket, --bitbucket-workspace <workspace> |
--repo-owner |
Per-flag detail:
| Flag | Applies to | Notes |
|---|---|---|
--name / -n |
all | Pipeline name (required) |
--repo / -r |
all | Existing repo URL, or a repo name when used with --create-repo (required) |
--description / -d |
all | Pipeline description (optional) |
--create-repo |
new repo only | Create the repo if it doesn't exist |
--repo-type |
new repo only | github or bitbucket (required when creating a repo) |
--repo-owner |
GitHub new repo | Organization or user that owns the repo (required for GitHub create) |
--bitbucket-workspace |
Bitbucket new repo | Workspace that owns the repo (required for Bitbucket create) |
--bitbucket-project-key |
Bitbucket new repo | Optional Bitbucket project key |
--stage / -s |
all | Name of a pipeline stage, in promotion order. Repeat once per stage. Defaults to Integration, UAT, Staging, Production |
Provider mismatch fails: pairing
--repo-ownerwith--repo-type bitbucket, or--bitbucket-workspacewith--repo-type github, is rejected. Match the provider flag to--repo-type.
Custom Stage Names at Create Time
By default a new pipeline seeds the stage chain Integration → UAT → Staging → Production. To seed a different chain, repeat --stage once per stage in promotion order:
sf devops pipeline create \
--target-org my-devops-org \
--name "Release Pipeline" \
--repo https://github.com/myorg/myrepo \
--stage Dev --stage QA --stage Prod \
--json
Seeding stages at create time avoids a separate round of stage add / stage update calls afterward.
After creating, resolve the new pipeline's ID by name from sf devops pipeline list --json (see references/parsing-patterns.md) — this avoids depending on the exact shape of the create response. A new pipeline always starts with at least one stage (the default chain, or your --stage list) — run sf devops pipeline get to see the seeded stages, then add or rename stages if you need to adjust the chain.
Update Pipeline (Activate / Deactivate / Rename)
# Activate — requires at least one stage
sf devops pipeline update --pipeline-id 0XB000000000001 --activate --json
# Deactivate
sf devops pipeline update --pipeline-id 0XB000000000001 --deactivate --json
# Rename
sf devops pipeline update --pipeline-id 0XB000000000001 --name "My Pipeline" --json
# Deactivate and rename in one step
sf devops pipeline update --pipeline-id 0XB000000000001 --deactivate --name "My Pipeline" --json
| Flag | Notes |
|---|---|
--pipeline-id |
Required — ID of the pipeline to update |
--activate |
Activate the pipeline. Mutually exclusive with --deactivate |
--deactivate |
Deactivate the pipeline. Mutually exclusive with --activate |
--name / -n |
New name for the pipeline. Can be combined with --deactivate |
- A pipeline must have at least one stage before it can be activated.
--activateand--deactivatecannot be used together;--deactivateand--namemay be combined in one command.- You can't modify pipeline stages after you activate and promote changes through it. Finish all stage/environment configuration before activating.
Add a Stage
Inserts an empty stage (no branch or environment) immediately before --next-stage-id. Configure its environment separately afterward.
# Add a Development stage before Integration
sf devops pipeline stage add \
--target-org my-devops-org \
--pipeline-id 0XB000000000001 \
--name "Development" \
--next-stage-id 0Xc000000000001 \
--json
Get the --next-stage-id from sf devops pipeline get. The new stage is always inserted immediately before the anchor stage you pass as --next-stage-id — there is no append-to-end flag. To place a stage at a given point in the chain, choose the anchor that should follow it (e.g. anchor to the terminal stage to insert the new stage just before it).
Rename / Delete a Stage
# Rename a stage
sf devops pipeline stage update \
--pipeline-id 0XB000000000001 \
--stage-id 0Xc000000000002 \
--name "QA" \
--json
# Delete a stage — the predecessor auto-relinks to the successor so the chain stays intact
sf devops pipeline stage delete \
--pipeline-id 0XB000000000001 \
--stage-id 0Xc000000000002 \
--json
Add an Environment to a Stage
sf devops stage environment add \
--target-org my-devops-org \
--pipeline-id 0XB000000000001 \
--stage-id 0Xp000000000001 \
--environment-name Production_Org \
--org-type Production \
--json
| Flag | Required | Notes |
|---|---|---|
--pipeline-id |
Required | Pipeline containing the stage |
--stage-id |
Required | Target stage (from pipeline get) |
--environment-name / -e |
Required | Environment name |
--org-type |
Required | Exactly Production or Sandbox |
--no-browser |
Optional | Don't auto-open a browser for OAuth; prints the redirect URL instead |
Headless caveat: This command triggers an OAuth flow and opens a browser by default. In CI or headless runs, pass
--no-browserand complete authentication via the printed redirect URL.
Delete an Environment from a Stage
The pipeline must be inactive before you can delete an environment.
sf devops stage environment delete \
--target-org my-devops-org \
--pipeline-id 0XB000000000001 \
--environment-id 0Xe000000000001 \
--json
--pipeline-id is used to verify the pipeline is inactive before deleting.
Attach / Detach a Project
A project can be attached to only one pipeline.
# Attach
sf devops pipeline project add \
--target-org my-devops-org \
--pipeline-id 0XB000000000001 \
--project-id 0Hn000000000001 \
--json
# Detach — deletes only the junction record; the project itself is not deleted
sf devops pipeline project delete \
--target-org my-devops-org \
--pipeline-id 0XB000000000001 \
--project-id 0Hn000000000001 \
--json
Resolve a project ID from its name via sf devops project list --json — see references/parsing-patterns.md for the jq snippet.