Overview
Integrate Vibgrate into Azure DevOps Pipelines to enforce drift governance on .NET, Node.js, Python, and Java projects.
Note: Vibgrate CLI requires Node.js to run, but can scan projects in any supported ecosystem.
Basic Pipeline
Minimal configuration that fails on critical drift issues:
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
steps:
- task: NodeTool@0
displayName: 'Setup Node.js'
inputs:
versionSpec: '22.x'
- script: npx @vibgrate/cli scan --format sarif --out vibgrate.sarif --fail-on error
displayName: 'Vibgrate Drift Scan'
- task: PublishBuildArtifacts@1
displayName: 'Publish SARIF'
inputs:
PathtoPublish: 'vibgrate.sarif'
ArtifactName: 'VibgrateSARIF'
With Vibgrate Cloud Push
Track drift trends across your organization:
steps:
- task: NodeTool@0
inputs:
versionSpec: '22.x'
- script: npx @vibgrate/cli scan --format sarif --out vibgrate.sarif --fail-on error
displayName: 'Vibgrate Drift Scan'
- script: npx @vibgrate/cli@latest push --file .vibgrate/scan_result.json --strict
displayName: 'Push to Vibgrate Cloud'
env:
VIBGRATE_DSN: $(VIBGRATE_DSN)
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
Tip: Use condition: to only push from main branch for clean trend data.
With Baseline Gates
Prevent drift regression on pull requests:
steps:
- task: NodeTool@0
inputs:
versionSpec: '22.x'
- script: |
npx @vibgrate/cli scan \
--baseline .vibgrate/baseline.json \
--drift-budget 40 \
--drift-worsening 5 \
--format sarif \
--out vibgrate.sarif \
--fail-on error
displayName: 'Vibgrate Scan with Gates'
| Gate | Effect |
|---|---|
--drift-budget 40 | Fail if score > 40 |
--drift-worsening 5 | Fail if drift increased > 5% vs baseline |
--fail-on error | Fail on critical findings |
.NET Projects
Vibgrate requires Node.js but scans .NET projects seamlessly:
pool:
vmImage: 'ubuntu-latest'
steps:
- task: UseDotNet@2
displayName: 'Setup .NET SDK'
inputs:
version: '8.x'
- task: NodeTool@0
displayName: 'Setup Node.js (for Vibgrate)'
inputs:
versionSpec: '22.x'
- script: npx @vibgrate/cli scan --format sarif --out vibgrate.sarif --fail-on error
displayName: 'Vibgrate Drift Scan'
Production-Ready Pipeline
Complete template with all features:
trigger:
branches:
include:
- main
- release/*
pr:
branches:
include:
- main
variables:
nodeVersion: '20.x'
stages:
- stage: DriftGovernance
displayName: 'Upgrade Drift Analysis'
jobs:
- job: DriftScan
displayName: 'Vibgrate Scan'
pool:
vmImage: 'ubuntu-latest'
steps:
- task: NodeTool@0
inputs:
versionSpec: '$(nodeVersion)'
- script: |
npx @vibgrate/cli scan \
--baseline .vibgrate/baseline.json \
--drift-budget 40 \
--drift-worsening 5 \
--format sarif \
--out vibgrate.sarif \
--fail-on error
displayName: 'Run Vibgrate Scan'
- task: PublishBuildArtifacts@1
displayName: 'Publish SARIF'
inputs:
PathtoPublish: 'vibgrate.sarif'
ArtifactName: 'VibgrateSARIF'
- task: PublishBuildArtifacts@1
displayName: 'Publish Scan Result'
inputs:
PathtoPublish: '.vibgrate/scan_result.json'
ArtifactName: 'VibgrateScanResult'
- script: npx @vibgrate/cli@latest push --file .vibgrate/scan_result.json --strict
displayName: 'Push to Vibgrate Cloud'
env:
VIBGRATE_DSN: $(VIBGRATE_DSN)
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
Setting Up Variables
Add your DSN as a secret variable:
- Go to Pipelines → Library → Variable groups
- Create variable group:
vibgrate-secrets - Add variable:
VIBGRATE_DSN(mark as secret) - Reference in pipeline with
$(VIBGRATE_DSN)
Related
- CI Integration Overview — Cross-platform CI setup
- GitHub Actions — Alternative CI platform
- vg push — Vibgrate Cloud upload details