18 / 67 · 06 Observability-Driven Testing · A/B Tests as Quality Gates← prev⊞ allnext →☰ Read as one page
3.5Automated Quality Gate Pipeline
Integrate quality gates into your deployment pipeline:
# .github/workflows/canary-quality-gate.yml
name: Canary Quality Gate
on:
workflow_dispatch:
inputs:
canary_version:
description: 'Docker image tag for canary'
required: true
jobs:
canary-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Deploy canary (5% traffic)
run: |
kubectl set image deployment/app-canary \
app=${{ inputs.canary_version }}
kubectl patch virtualservice app-vs --type merge -p '
{"spec":{"http":[{"route":[
{"destination":{"host":"app-stable"},"weight":95},
{"destination":{"host":"app-canary"},"weight":5}
]}]}}'
- name: Wait for observation window
run: sleep 900 # 15 minutes
- name: Run quality gate analysis
run: |
python scripts/quality_gate.py \
--prometheus-url ${{ secrets.PROMETHEUS_URL }} \
--control-label "version=stable" \
--canary-label "version=${{ inputs.canary_version }}" \
--window 15m
- name: Promote or rollback
if: always()
run: |
if [ "${{ steps.quality-gate.outcome }}" == "success" ]; then
echo "Promoting canary to stable"
kubectl set image deployment/app-stable \
app=${{ inputs.canary_version }}
else
echo "Rolling back canary"
kubectl scale deployment/app-canary --replicas=0
fi