Complete azure-pipelines toolkit with generation and validation capabilities
97
97%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Advisory
Suggest reviewing before use
Validates, lints, and security-scans Azure DevOps Pipeline configurations (azure-pipelines.yml, azure-pipelines.yaml). Runs four validation layers via a single orchestrator script.
# Full validation (all layers)
bash .claude/skills/azure-pipelines-validator/scripts/validate_azure_pipelines.sh azure-pipelines.ymlLayers executed in order: 0. YAML lint (yamllint) — formatting, indentation, trailing spaces
:latest tags# Targeted runs
bash scripts/validate_azure_pipelines.sh azure-pipelines.yml --syntax-only
bash scripts/validate_azure_pipelines.sh azure-pipelines.yml --best-practices
bash scripts/validate_azure_pipelines.sh azure-pipelines.yml --security-only
# Skip layers
bash scripts/validate_azure_pipelines.sh azure-pipelines.yml --skip-yaml-lint
bash scripts/validate_azure_pipelines.sh azure-pipelines.yml --no-best-practices
bash scripts/validate_azure_pipelines.sh azure-pipelines.yml --no-security
# Strict mode (fail on warnings)
bash scripts/validate_azure_pipelines.sh azure-pipelines.yml --strictpython3 scripts/validate_syntax.py azure-pipelines.yml
python3 scripts/check_best_practices.py azure-pipelines.yml
python3 scripts/check_security.py azure-pipelines.yml════════════════════════════════════════════════════════════════════════════════
Azure Pipelines Validator
════════════════════════════════════════════════════════════════════════════════
[1/3] Running syntax validation...
✓ Syntax validation passed
[2/3] Running best practices check...
SUGGESTIONS (2):
INFO: Line 15: Job 'BuildJob' should have displayName [missing-displayname]
💡 Add 'displayName: "Your Job Description"' to job 'BuildJob'
WARNING: Line 25: Task 'Npm@1' could benefit from caching [missing-cache]
💡 Add Cache@2 task to cache dependencies and speed up builds
[3/3] Running security scan...
MEDIUM SEVERITY (1):
MEDIUM: Line 8: Container 'linux' uses ':latest' tag [container-latest-tag]
🔒 Pin container images to specific versions or SHA digestsWhen validation fails:
[missing-displayname]) — see references/ for rule details.--syntax-only, --security-only, etc.) to iterate quickly.MEDIUM/HIGH security findings, do not merge until resolved; INFO findings are advisory.bash scripts/validate_azure_pipelines.sh new-pipeline.ymlbash scripts/validate_azure_pipelines.sh azure-pipelines.yml --security-only --strictbash scripts/validate_azure_pipelines.sh azure-pipelines.yml --best-practicessteps:
- script: |
bash .claude/skills/azure-pipelines-validator/scripts/validate_azure_pipelines.sh azure-pipelines.yml --strict
displayName: 'Validate Pipeline Configuration'Run without arguments to auto-detect azure-pipelines*.yml files in the current directory (up to 3 levels deep).
The validator performs static analysis only. For dynamic lookups (task versions, input parameters, feature docs), use:
# Context7 MCP
mcp__context7__resolve-library-id("azure-pipelines")
mcp__context7__get-library-docs(context7CompatibleLibraryID, topic="deployment")
# Or WebSearch / WebFetch
WebSearch("Azure Pipelines Docker@2 task documentation 2025")
WebFetch("https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/docker-v2").venv if not available system-wide — no manual setup required.# Optional manual install
pip3 install PyYAML yamllint| Problem | Fix |
|---|---|
ModuleNotFoundError: PyYAML | pip3 install PyYAML |
Permission denied | chmod +x scripts/*.sh scripts/*.py |
| Unexpected validation errors | Check references/azure-pipelines-reference.md or Microsoft Learn |
azure-pipelines.yml and skip all files under templates/*.yml..yml file in the pipeline directory, including all templates.yamllint warnings such as "trailing spaces" or "wrong indentation" because the pipeline appears to run.yamllint pass is a prerequisite for a trustworthy pipeline.--strict fails on all warnings, which is the correct setting for a CI gate. Applied to a brand-new pipeline with dozens of warnings, it produces so much noise that engineers discard the output entirely and disable validation rather than fix the root causes.--strict on a new pipeline, see 30 warnings, and remove validation from the workflow because "it's too noisy."--strict first, fix critical errors, then warnings, then graduate to strict mode as a CI gate.--security as part of the validation workflow, treating MEDIUM and HIGH findings as merge blockers.references/azure-pipelines-reference.md — full YAML syntax reference and rule definitionsassets/examples/basic-pipeline.yml — simple CI pipelineassets/examples/docker-build.yml — Docker build and pushassets/examples/deployment-pipeline.yml — multi-environment deployment with approval gatesassets/examples/multi-platform.yml — multi-platform build matrixassets/examples/template-example.yml — reusable templates# Test with a bundled example
bash scripts/validate_azure_pipelines.sh assets/examples/basic-pipeline.ymlAdd custom rules to the appropriate script:
scripts/validate_syntax.pyscripts/check_best_practices.pyscripts/check_security.py# Example custom best-practice rule in check_best_practices.py
def _check_custom_rule(self):
for job in self._get_all_jobs():
job_name = job.get('job') or job.get('deployment')
if 'tags' not in pool:
self.issues.append(BestPracticeIssue(
'warning',
self._get_line(job_name),
f"Job '{job_name}' should specify agent tags",
'custom-missing-tags',
"Add 'tags' to pool to select appropriate agents"
))Note: This skill validates pipeline configurations but does not execute pipelines. Use Azure DevOps Pipeline validation or Azure CLI to test actual pipeline execution.