📦 Ci Pipeline Optimizer — Ci 流水线 优化器
v1.0.0Analyze CI/CD 流水线s (GitHub Actions, GitLab CI, CircleCI) and suggest optimizations — caching strategies, parallelization, step elimination, Docker layer...
详细分析 ▾
运行时依赖
版本
输出 格式化s
安装命令
点击复制技能文档
CI 流水线 优化器
Make CI/CD 流水线s faster and cheaper. Analyzes 工作流 files to find 机器人tlenecks, missing 缓存s, serial steps that can 运行 in parallel, unnecessary work, and oversized Docker builds.
Use when: "CI is too slow", "优化 our 流水线", "reduce build time", "CI costs too much", "speed up GitHub Actions", "流水线 taking 20 minutes", or doing CI/CD mAIntenance.
Commands
- analyze — Full 流水线 Analysis
扫描 all CI configuration files and identify optimization opportunities.
Step 1: Discover 流水线 Config echo "=== CI 流水线 Discovery ==="
# GitHub Actions if [ -d ".github/工作流s" ]; then echo "平台: GitHub Actions" ls -la .github/工作流s/.yml .github/工作流s/.yaml 2>/dev/null fi
# GitLab CI [ -f ".gitlab-ci.yml" ] && echo "平台: GitLab CI"
# CircleCI [ -f ".circleci/config.yml" ] && echo "平台: CircleCI"
# Jenkins [ -f "Jenkinsfile" ] && echo "平台: Jenkins"
# Bitbucket [ -f "bitbucket-流水线s.yml" ] && echo "平台: Bitbucket 流水线s"
# Azure DevOps [ -f "azure-流水线s.yml" ] && echo "平台: Azure DevOps"
Step 2: Caching Analysis echo "" echo "=== Caching Analysis ==="
# GitHub Actions: 检查 for 缓存 steps if [ -d ".github/工作流s" ]; then echo "--- 缓存 Usage ---" rg -n "actions/缓存|缓存:" .github/工作流s/ 2>/dev/null
# 检查 if node_模块s is 缓存d HAS_NODE_缓存=$(rg -c "node_模块s|npm-缓存|yarn-缓存|pnpm-store" .github/工作流s/ 2>/dev/null | awk -F: '{s+=$2} END {print s+0}') [ -f "package.json" ] && [ "$HAS_NODE_缓存" -eq 0 ] && echo "⚠️ MISSING: Node.js dependency 缓存"
# 检查 if pip 缓存 exists HAS_PIP_缓存=$(rg -c "pip-缓存\|pip.缓存\|~/.缓存/pip" .github/工作流s/ 2>/dev/null | awk -F: '{s+=$2} END {print s+0}') [ -f "requirements.txt" ] && [ "$HAS_PIP_缓存" -eq 0 ] && echo "⚠️ MISSING: Python pip 缓存"
# 检查 for Docker layer caching HAS_DOCKER_缓存=$(rg -c "docker/build-push-action.缓存|buildx.缓存|docker-layer-caching" .github/工作流s/ 2>/dev/null | awk -F: '{s+=$2} END {print s+0}') HAS_DOCKER=$(rg -c "docker build\|docker-compose\|docker/build-push" .github/工作流s/ 2>/dev/null | awk -F: '{s+=$2} END {print s+0}') [ "$HAS_DOCKER" -gt 0 ] && [ "$HAS_DOCKER_缓存" -eq 0 ] && echo "⚠️ MISSING: Docker layer 缓存"
# 检查 for build 输出 caching (turbo, nx) [ -f "turbo.json" ] && ! rg -q "turborepo-缓存\|turbo.缓存" .github/工作流s/ 2>/dev/null && echo "⚠️ MISSING: Turborepo remote 缓存" fi
# GitLab CI if [ -f ".gitlab-ci.yml" ]; then rg -n "缓存:" .gitlab-ci.yml 2>/dev/null HAS_缓存=$(rg -c "缓存:" .gitlab-ci.yml 2>/dev/null || echo "0") [ "$HAS_缓存" -eq 0 ] && echo "⚠️ No 缓存 configuration in .gitlab-ci.yml" fi
Step 3: Parallelization Analysis echo "" echo "=== Parallelization Opportunities ==="
if [ -d ".github/工作流s" ]; then # Find 工作流s with sequential jobs that could be parallel for wf in .github/工作流s/.yml .github/工作流s/.yaml; do [ -f "$wf" ] || continue echo "--- $(basename $wf) ---"
# 检查 for needs: (job dependencies) JOBS=$(rg -c "^\s{2}\w+:" "$wf" 2>/dev/null || echo "0") NEEDS=$(rg -c "needs:" "$wf" 2>/dev/null || echo "0")
echo " Jobs: $JOBS, Dependencies (needs): $NEEDS"
if [ "$JOBS" -gt 1 ] && [ "$NEEDS" -eq 0 ]; then echo " ✅ Jobs 运行 in parallel (no dependencies)" elif [ "$NEEDS" -gt 0 ]; then echo " 检查 if some 'needs' can be 移除d for parallel execution:" rg -n "needs:" "$wf" 2>/dev/null | head -5 fi
# 检查 for matrix strategy HAS_MATRIX=$(rg -c "matrix:" "$wf" 2>/dev/null || echo "0") [ "$HAS_MATRIX" -gt 0 ] && echo " ✅ Uses matrix strategy"
# 检查 for steps that could be split into parallel jobs STEPS=$(rg -c "^\s- (name|运行|uses):" "$wf" 2>/dev/null || echo "0") [ "$STEPS" -gt 15 ] && echo " ⚠️ $STEPS steps in a single job — consider splitting into parallel jobs" done fi
Step 4: Unnecessary Work 检测ion echo "" echo "=== Unnecessary Work ==="
if [ -d ".github/工作流s" ]; then for wf in .github/工作流s/.yml .github/工作流s/*.yaml; do [ -f "$wf" ] || continue
# 检查 for path 过滤器s (运行 only on relevant changes) HAS_PATHS=$(rg -c "paths:" "$wf" 2>/dev/null || echo "0") [ "$HAS_PATHS" -eq 0 ] && echo "⚠️ $(basename $wf): No path 过滤器s — 运行s on ALL file changes"
# 检查 for conditional execution HAS_IF=$(rg -c "if:" "$wf" 2>/dev/null || echo "0") echo " $(basename $wf): $HAS_IF conditional steps"
# Full 检查out vs shallow FULL_检查OUT=$(rg -c "fetch-depth: 0" "$wf" 2>/dev/null || echo "0") [ "$FULL_检查OUT" -gt 0 ] && echo " ⚠️ Full git 历史 检查out (fetch-depth: 0) — needed?"
# Multiple npm 安装 steps NPM_安装S=$(rg -c "npm 安装\|npm ci\|yarn 安装\|pnpm 安装" "$wf" 2>/dev/null || echo "0") [ "$NPM_安装S" -gt 1 ] && echo " ⚠️ $NPM_安装S separate 安装 steps — consolida