Azure / Azure/azure-devops-cli-extension
Support Idempotent Pipeline Creation/Updates with az pipelines update --create
- Dominant language
- Python
- Stars
- 682
- Forks
- 278
- Avg merge
- 3d 23h
- Merged PRs (30d)
- 3
Description
**Is your feature request related to a problem? Please describe.**
Currently I have a Makefile with a handful of `az pipelines` targets in it. They look something like this:
```bash
PIPELINE_NAME="Prod Environment - Deploy Platform Resources"
if az pipelines show --name "$PIPELINE_NAME" >/dev/null 2>&1; then
echo "Pipeline exists. Updating..."
az pipelines update \
--name "$PIPELINE_NAME" \
--repository PlatformInfrastructure \
--branch main \
--yml-path .azuredevops/pipelines-v2/deploy-platform-resources-prod.yaml \
--repository-type tfsgit \
--folder-path "\Platform\Infrastructure" \
--skip-first-run true
else
echo "Pipeline doesn't exist. Creating..."
az pipelines create \
--name "$PIPELINE_NAME" \
--repository PlatformInfrastructure \
--branch main \
--yml-path .azuredevops/pipelines-v2/deploy-platform-resources-prod.yaml \
--repository-type tfsgit \
--folder-path "\Platform\Infrastructure" \
--skip-first-run true
fi
```
This repetitive conditional logic makes automation more verbose than it needs to be. Other CLI tools like `helm`, `kubectl`, and `terraform` support more declarative workflows that just work regardless of the current state.
---
**Describe the solution you'd like**
There are two potential approaches that would improve the developer experience here:
---
**Option 1: Add a new command like `az pipelines apply`**
Introduce a new command similar to `kubectl apply` or `helm upgrade --install`:
```bash
az pipelines apply \
--name "Prod Environment - Deploy Platform Resources" \
--repository PlatformInfrastructure \
--branch main \
--yml-path .azuredevops/pipelines-v2/deploy-platform-resources-prod.yaml \
--repository-type tfsgit \
--folder-path "\Platform\Infrastructure" \
--skip-first-run true
```
This would:
- Create the pipeline if it doesn’t exist
- Update it if it does
---
**Option 2: Extend `az pipelines update` with a `--create` flag**
Allow `az pipelines update` to create the pipeline if it doesn’t exist by adding a `--create` flag:
```bash
az pipelines update \
--name "Prod Environment - Deploy Platform Resources" \
--repository PlatformInfrastructure \
--branch main \
--yml-path .azuredevops/pipelines-v2/deploy-platform-resources-prod.yaml \
--repository-type tfsgit \
--folder-path "\Platform\Infrastructure" \
--skip-first-run true \
--create
```
This would preserve compatibility with existing commands and avoid introducing a new top-level verb.
---
**Additional context**
This would significantly simplify automation in scripts and Makefiles. Supporting idempotent pipeline declarations aligns with best practices in modern infrastructure tooling and improves UX for GitOps-style workflows.
Contributor guide
Assessment
This issue has not been assessed yet.