-
Notifications
You must be signed in to change notification settings - Fork 262
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:
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
fiThis 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:
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 trueThis 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:
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 \
--createThis 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.