DevOps Detector Skill
Purpose
Detect DevOps tools, CI/CD platforms, containerization, and orchestration from repository signals, job postings, and infrastructure indicators.
Input
Raw signals from Phase 2:
-
repository_signals
-
CI/CD configs, Dockerfiles, IaC
-
job_signals
-
DevOps job requirements
-
dns_signals
-
Service-specific subdomains
-
http_signals
-
Deployment patterns
Technology Categories
CI/CD Platforms
Platform Detection Signals Weight
GitHub Actions .github/workflows/*.yml 40
GitLab CI .gitlab-ci.yml 40
Jenkins Jenkinsfile, jenkins.* subdomain 35
CircleCI .circleci/config.yml 40
Travis CI .travis.yml 35
Azure Pipelines azure-pipelines.yml 40
Bitbucket Pipelines bitbucket-pipelines.yml 35
Drone CI .drone.yml 35
TeamCity .teamcity/ directory 35
Buildkite .buildkite/ directory 35
Build Tools
Tool Detection Signals Weight
Webpack webpack.config.js, webpack patterns 30
Vite vite.config.js 30
Rollup rollup.config.js 30
esbuild esbuild patterns 25
Turbo turbo.json 30
Nx nx.json 30
Lerna lerna.json 25
pnpm pnpm-workspace.yaml 25
Containerization
Technology Detection Signals Weight
Docker Dockerfile, docker-compose.yml 40
Podman Containerfile, podman-compose.yml 35
containerd containerd config 30
Container Orchestration
Platform Detection Signals Weight
Kubernetes k8s/, kubernetes/, kustomization.yaml 40
Docker Swarm docker-stack.yml 30
Amazon ECS ecs-*.json, task definitions 35
Nomad *.nomad files 30
Infrastructure as Code
Tool Detection Signals Weight
Terraform *.tf files, .terraform/ 40
Pulumi Pulumi.yaml 35
AWS CloudFormation *.cfn.yml, template.yaml 35
AWS CDK cdk.json 35
Ansible ansible.cfg, playbook.yml 35
Chef cookbooks/, recipes/ 30
Puppet manifests/, modules/ 30
Helm Chart.yaml, charts/ 35
Monitoring & Observability
Tool Detection Signals Weight
Prometheus prometheus.yml 35
Grafana grafana.* subdomain 30
Datadog datadog-agent configs 35
New Relic newrelic.yml 35
Sentry sentry.properties, dsn in config 35
PagerDuty pagerduty integration 30
OpsGenie opsgenie integration 30
Secret Management
Tool Detection Signals Weight
HashiCorp Vault vault references 30
AWS Secrets Manager secretsmanager patterns 30
Doppler doppler.yaml 30
1Password op:// references 25
Detection Logic
def detect_devops_technologies(signals): results = []
# CI/CD Detection from Repository
if signals.repository_signals:
for file in signals.repository_signals.files:
# GitHub Actions
if '.github/workflows/' in file and file.endswith('.yml'):
results.append({
"name": "GitHub Actions",
"category": "CI/CD",
"signals": [{"type": "config_file", "value": file}],
"total_weight": 40
})
# GitLab CI
if file == '.gitlab-ci.yml':
results.append({
"name": "GitLab CI",
"category": "CI/CD",
"signals": [{"type": "config_file", "value": file}],
"total_weight": 40
})
# Docker
if file.lower() in ['dockerfile', 'docker-compose.yml', 'docker-compose.yaml']:
results.append({
"name": "Docker",
"category": "Containerization",
"signals": [{"type": "config_file", "value": file}],
"total_weight": 40
})
# Kubernetes
if any(k8s_indicator in file.lower() for k8s_indicator in ['kubernetes', 'k8s', 'kustomization', 'helm']):
results.append({
"name": "Kubernetes",
"category": "Container Orchestration",
"signals": [{"type": "config_file", "value": file}],
"total_weight": 40
})
# Terraform
if file.endswith('.tf'):
results.append({
"name": "Terraform",
"category": "Infrastructure as Code",
"signals": [{"type": "config_file", "value": file}],
"total_weight": 40
})
# Job Posting Analysis
if signals.job_signals:
devops_keywords = {
"kubernetes": ("Kubernetes", "Container Orchestration"),
"docker": ("Docker", "Containerization"),
"terraform": ("Terraform", "Infrastructure as Code"),
"ansible": ("Ansible", "Configuration Management"),
"jenkins": ("Jenkins", "CI/CD"),
"github actions": ("GitHub Actions", "CI/CD"),
"gitlab ci": ("GitLab CI", "CI/CD"),
"prometheus": ("Prometheus", "Monitoring"),
"grafana": ("Grafana", "Monitoring"),
"datadog": ("Datadog", "Monitoring"),
"aws": ("AWS", "Cloud Platform"),
"gcp": ("Google Cloud", "Cloud Platform"),
"azure": ("Azure", "Cloud Platform")
}
for keyword, (tech_name, category) in devops_keywords.items():
if keyword in signals.job_signals.tech_mentions:
add_if_not_exists(results, tech_name, category, {
"type": "job_posting",
"value": f"'{keyword}' mentioned in job postings",
"frequency": signals.job_signals.tech_mentions[keyword].frequency
}, 25)
# DNS-based Detection
devops_subdomains = {
"jenkins": ("Jenkins", "CI/CD"),
"ci": ("CI/CD System", "CI/CD"),
"build": ("Build System", "CI/CD"),
"deploy": ("Deployment System", "CI/CD"),
"grafana": ("Grafana", "Monitoring"),
"prometheus": ("Prometheus", "Monitoring"),
"kibana": ("Elastic Stack", "Logging"),
"argocd": ("Argo CD", "GitOps"),
"vault": ("HashiCorp Vault", "Secret Management")
}
for subdomain in signals.discovered_subdomains:
for pattern, (tech_name, category) in devops_subdomains.items():
if pattern in subdomain.lower():
results.append({
"name": tech_name,
"category": category,
"signals": [{"type": "subdomain", "value": subdomain}],
"total_weight": 30
})
return results
Output
{ "skill": "devops_detector", "results": { "technologies": [ { "name": "GitHub Actions", "category": "CI/CD", "signals": [ { "type": "config_file", "value": ".github/workflows/ci.yml", "weight": 40 }, { "type": "config_file", "value": ".github/workflows/deploy.yml", "weight": 40 } ], "total_weight": 80, "workflows_detected": ["ci.yml", "deploy.yml"] }, { "name": "Docker", "category": "Containerization", "signals": [ { "type": "config_file", "value": "Dockerfile", "weight": 40 }, { "type": "config_file", "value": "docker-compose.yml", "weight": 35 } ], "total_weight": 75, "base_images": ["node:18-alpine", "nginx:alpine"] }, { "name": "Kubernetes", "category": "Container Orchestration", "signals": [ { "type": "config_file", "value": "kubernetes/deployment.yaml", "weight": 40 }, { "type": "job_posting", "value": "Kubernetes mentioned in 5 job postings", "weight": 25 } ], "total_weight": 65 }, { "name": "Terraform", "category": "Infrastructure as Code", "signals": [ { "type": "config_file", "value": "terraform/main.tf", "weight": 40 } ], "total_weight": 40, "providers_detected": ["aws", "cloudflare"] }, { "name": "Datadog", "category": "Monitoring", "signals": [ { "type": "job_posting", "value": "Datadog mentioned in DevOps job postings", "weight": 25 } ], "total_weight": 25 } ], "devops_summary": { "ci_cd": ["GitHub Actions"], "containerization": ["Docker"], "orchestration": ["Kubernetes"], "iac": ["Terraform"], "monitoring": ["Datadog"], "maturity_assessment": "Advanced - Full CI/CD pipeline with IaC and container orchestration" } } }
Maturity Assessment
DevOps Maturity Levels:
Basic:
- Manual deployments
- No CI/CD detected
- Minimal automation
Intermediate:
- CI/CD pipeline detected
- Containerization (Docker)
- Basic monitoring
Advanced:
- Full CI/CD with multiple stages
- Container orchestration (K8s)
- Infrastructure as Code
- Comprehensive monitoring
Cloud-Native:
- GitOps practices (ArgoCD)
- Service mesh
- Observability stack
- Multi-cloud or hybrid
Error Handling
-
Private repositories: Note as limitation
-
Incomplete config analysis: Provide partial results
-
Job posting only signals: Lower confidence