Azure DevOps

Azure DevOps Repos (dev.azure.com) and Azure DevOps Server (on-prem).

Auth

Two options, both common:

SSH — generate a key, paste at User settings → SSH public keys in Azure DevOps. Test:

ssh -T git@ssh.dev.azure.com

PAT over HTTPS — generate a Personal Access Token with Code (Read & write) scope. Use it as the password when prompted; cache via your credential helper.

CLI binding: az repos

quay uses az repos pr create for PR mode. Install the Azure CLI:

brew install azure-cli      # macOS
# or: curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
az extension add --name azure-devops

Sign in:

az login
az devops configure --defaults organization=https://dev.azure.com/myorg project=skills

Without az, PR mode falls back to printing a compare URL.

URL formats

Azure DevOps URLs are long. Two equivalents quay accepts:

FormUse
https://dev.azure.com/<org>/<project>/_git/<repo>HTTPS. Auto-detected as azuredevops.
git@ssh.dev.azure.com:v3/<org>/<project>/<repo>SSH. Auto-detected as azuredevops.

Add the remote

quay remote add work https://dev.azure.com/myorg/skills/_git/skills-hub --provider azuredevops --default
quay remote test work

Branch policy gotchas

Azure DevOps "Branch policies" are powerful and strict:

  • Minimum reviewers — direct push to a policied branch fails. Use push_mode = "pr".
  • Build validation — PR cannot complete until pipeline passes. quay's job ends at PR-create; you wait for the build.
  • Required reviewers — auto-assigned, no quay involvement.

For low-friction internal hubs, exempt the hub repo from branch policies (Repos → Branches → policies) and use push_mode = "direct".

Default branch

Reads HEAD from the remote after clone. New repos default to main; older ones may be master. Set the default at Repos → Branches.

Common errors

SymptomFix
az: command not foundInstall Azure CLI + azure-devops extension.
TF401019 (no access)PAT scope wrong; regenerate with Code (Read & write).
RemoteRejection: pre-receive hookBranch policy. Use --push-mode pr.
pull request creation failed from azaz devops configure defaults not set, or extension missing. Re-run setup.

Server (on-prem)

Same provider name (azuredevops). Authenticate az against the on-prem URL:

az devops configure --defaults organization=https://tfs.corp.example/<collection> project=skills

Next