> For the complete documentation index, see [llms.txt](https://docs.does.qa/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.does.qa/platform/integrations/azure-devops.md).

# Azure DevOps

Connect Azure Pipelines to DoesQA so builds and releases can start a Run without leaving your Azure DevOps project. A pipeline task calls the [Universal Webhook](/platform/integrations/universal-webhook.md) over HTTP.

## Why use it

* Run DoesQA from the same pipeline that compiles, deploys, or gates a release.
* Share one CI/CD key across Azure, GitHub, and GitLab.
* Choose Flows with tags or a [Run Recipe](/configuration/run-recipes.md), then wait for the result when the gate matters.

## Before you start

1. Create an Active CI/CD webhook key under **Settings → CI/CD**. See [CI / CD](/configuration/ci-cd.md).
2. Copy your **Account ID** from Account Settings.
3. Store them as secret pipeline variables, for example `DOESQA_KEY` and `DOESQA_ACCOUNT_ID`.

## Add a pipeline task

In `azure-pipelines.yml`:

```yaml
trigger:
  - main

pool:
  vmImage: ubuntu-latest

steps:
  - bash: |
      curl -sS -X POST \
        "https://app.does.qa/api/hook/$(DOESQA_ACCOUNT_ID)?key=$(DOESQA_KEY)&withAll=smoke&label=azure-$(Build.BuildId)&mode=wait"
    displayName: DoesQA Run
    env:
      DOESQA_KEY: $(DOESQA_KEY)
      DOESQA_ACCOUNT_ID: $(DOESQA_ACCOUNT_ID)
```

{% hint style="info" %}
**Pro tip:** Map `DOESQA_KEY` as a secret variable in the pipeline or variable group. Azure masks it in logs when the name is marked secret.
{% endhint %}

### Select Flows and Values

Use the same query options as the [Universal Webhook](/platform/integrations/universal-webhook.md). Example with a Recipe and Value override:

```yaml
steps:
  - bash: |
      VALUES=$(python3 -c 'import urllib.parse; print(urllib.parse.quote("{\"BASE_URL\":\"https://staging.example.com\"}"))')
      curl -sS -X POST \
        "https://app.does.qa/api/hook/$(DOESQA_ACCOUNT_ID)?key=$(DOESQA_KEY)&recipe=4sJz2&label=azure-$(Build.BuildId)&values=${VALUES}&mode=wait"
    displayName: DoesQA Run
    env:
      DOESQA_KEY: $(DOESQA_KEY)
      DOESQA_ACCOUNT_ID: $(DOESQA_ACCOUNT_ID)
```

## Related

* [Integrations](/platform/integrations.md)
* [Universal Webhook](/platform/integrations/universal-webhook.md)
* [GitHub](/platform/integrations/github.md)
* [GitLab](/platform/integrations/gitlab.md)
* [Bitbucket](/platform/integrations/bitbucket.md)
* [CI / CD](/configuration/ci-cd.md)
* [Notifications](/configuration/notifications.md)
