Azure DevOps AST Orchestrator
The Conviso Platform Azure DevOps AST Orchestrator centralizes AST scanning in a single Azure Pipeline. Instead of maintaining a pipeline in every repository, Conviso triggers one orchestrator pipeline with the target repository and commit information after PR merges.
Overview
The Orchestrator model provides:
- Centralized management: Maintain scanning logic in one pipeline.
- Consistency: Apply the same scan behavior to all mapped repositories.
- Simple onboarding: Add repository mappings without duplicating CI configuration.
Execution costs: Scans run in your Azure Pipelines environment and consume your Azure Pipeline runtime.
Prerequisites
Before you start:
- Azure DevOps integration is configured in Conviso Platform.
- AST Scans is enabled in the integration.
- You have an Azure Pipeline that will act as the orchestrator.
- The pipeline has access to a Variable Group with:
ADO_GIT_PAT(Code Read permission for target repositories)CONVISO_API_KEY(Conviso API key for the target environment)
Configure the Orchestrator in Conviso
Step 1 - Open Azure DevOps integration
In Conviso Platform, go to Integrations, filter by Application Lifecycle Management, and open Azure DevOps.

Step 2 - Configure Orchestrator settings
In Integrations > Azure DevOps > Orchestrator configuration, fill:
- Orchestrator organization: Azure DevOps organization name (e.g.
my-org) - Orchestrator project: Project where the orchestrator pipeline is defined
- Orchestrator pipeline ID: Numeric pipeline ID in Azure DevOps
- Orchestrator ref: Branch/tag where the YAML is stored (recommended:
main)
Then click Save configuration.

Step 3 - Create a PAT in Azure DevOps
In Azure DevOps, create a Personal Access Token with Code (Read) scope for repositories that will be scanned.

Step 4 - Configure Variable Group secrets
In Azure DevOps Pipelines > Library > conviso-group, add:
ADO_GIT_PATCONVISO_API_KEY
Both must be stored as secret variables.

Configure Merge Trigger
After enabling AST Scans and saving Orchestrator settings, Conviso automatically triggers the orchestrator pipeline on eligible PR merges for mapped assets.
Pipeline Template (Azure DevOps)
Use this orchestrator pipeline template:
trigger: none
pr: none
parameters:
- name: repo_full_name
type: string
default: REPLACE/REPLACE
- name: branch
type: string
default: replace-me
- name: commit_sha
type: string
default: replace-me
- name: pr_number
type: string
default: ""
- name: api_url
type: string
default: "https://api.convisoappsec.com"
variables:
- group: conviso-group
pool:
vmImage: ubuntu-latest
jobs:
- job: ast
container: convisoappsec/convisoast:latest
steps:
- checkout: none
- bash: |
set -euo pipefail
REPO_FULL='${{ parameters.repo_full_name }}'
BRANCH='${{ parameters.branch }}'
SHA='${{ parameters.commit_sha }}'
case "$REPO_FULL" in ''|REPLACE/REPLACE) echo "##vso[task.logissue type=error]repo_full_name inválido"; exit 1;; esac
case "$SHA" in ''|replace-me) echo "##vso[task.logissue type=error]commit_sha inválido"; exit 1;; esac
test -n "${ADO_GIT_PAT:-}" || { echo "##vso[task.logissue type=error]ADO_GIT_PAT ausente"; exit 1; }
test -n "${CONVISO_API_KEY:-}" || { echo "##vso[task.logissue type=error]CONVISO_API_KEY ausente"; exit 1; }
PROJECT="${REPO_FULL%%/*}"
REPO="${REPO_FULL#*/}"
ORG="${SYSTEM_COLLECTIONURI#https://dev.azure.com/}"
ORG="${ORG%/}"
WORKDIR="$(Build.SourcesDirectory)"
rm -rf "${WORKDIR:?}"/* && mkdir -p "$WORKDIR" && cd "$WORKDIR"
git init -q
git remote add origin "https://:${ADO_GIT_PAT}@dev.azure.com/${ORG}/${PROJECT}/_git/${REPO}"
git fetch origin "$SHA"
git checkout -B "$BRANCH" "$SHA"
PREV="$(git rev-parse "${SHA}^1")"
export CONVISO_API_URL='https://api.convisoappsec.com'
conviso ast run --asset-name "${ORG}/${REPO}" --current-commit "$SHA" --previous-commit "$PREV" --vulnerability-auto-close
env:
ADO_GIT_PAT: $(ADO_GIT_PAT)
CONVISO_API_KEY: $(CONVISO_API_KEY)
SYSTEM_COLLECTIONURI: $(System.CollectionUri)
Step 5 - Save pipeline YAML
Open your orchestrator pipeline in Azure DevOps and save the YAML.

How the flow works
- User merges a PR in Azure DevOps.
- Conviso triggers the configured orchestrator pipeline with repository and commit parameters.
- Pipeline clones the target repository and runs
conviso ast run. - Findings are sent to the mapped asset in Conviso Platform.
Step 6 - Validate a successful run
After a PR merge, confirm the pipeline run is created and finished successfully.

Troubleshooting
| Problem | What to check |
|---|---|
| PR merged but no pipeline run is created | Confirm AST Scans is enabled, the asset mapping is active for the merged branch, and Orchestrator configuration (organization/project/pipeline ID/ref) is correct. |
Pipeline trigger fails with Unexpected parameter 'api_url' | Keep api_url declared in pipeline parameters for compatibility with worker payload. |
| Git clone fails with repository not found/permission denied | Validate ADO_GIT_PAT scopes and access to cross-project repositories. |
Invalid API key in AST | Confirm CONVISO_API_KEY belongs to the same environment used by CONVISO_API_URL. |
| Pipeline runs but no findings are created | Confirm the asset naming (organization/repository) is mapped correctly and review pipeline logs for conviso ast run errors. |
Support
If you need help validating orchestrator settings, repository access, or pipeline permissions, contact Conviso Support.
Contribute to the Docs
Found something outdated or missing? Help us improve the documentation with a quick suggestion or edit.
How to contributeResources
By exploring our content, you'll find resources that will enhance your understanding of the importance of a Security Application Program.
Conviso Blog: Explore our blog, which offers a collection of articles and posts covering a wide range of AppSec topics. The content on the blog is primarily in English.
Conviso's YouTube Channel: Access a wealth of informative videos covering various topics related to AppSec. Please note that the content is primarily in Portuguese.