Skip to main content
CI Integration

Azure DevOps

Integrate Vibgrate with Azure Pipelines for .NET and Node.js projects.

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'
GateEffect
--drift-budget 40Fail if score > 40
--drift-worsening 5Fail if drift increased > 5% vs baseline
--fail-on errorFail 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:

  1. Go to PipelinesLibraryVariable groups
  2. Create variable group: vibgrate-secrets
  3. Add variable: VIBGRATE_DSN (mark as secret)
  4. Reference in pipeline with $(VIBGRATE_DSN)

Related

Related Documentation