mcpField
D
devops-excellence

devops-excellence

github.com/majiayu000云与 DevOps288111 次安装1 天前更新
代码仓库

关于 devops-excellence

devops-excellence 是面向团队的 DevOps 技能,提供安全交付软件和运维基础设施的实践指导,涵盖 CI/CD、GitOps、基础设施即代码及容器与 Kubernetes。

主要功能

  1. 01GitOps 与基础设施即代码
  2. 02渐进式交付与发布模式
  3. 03CI/CD 安全与流水线优化
  4. 04Docker 镜像与容器加固
  5. 05Kubernetes 资源与安全实践
  6. 06可观测性与策略即代码

适用场景

  1. 01使用短期凭证设计 CI/CD 流水线
  2. 02选择 Canary 或蓝绿部署
  3. 03加固运行时使用的 Docker 镜像
  4. 04管理 Kubernetes 健康检查与资源

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/majiayu000/spellbook --skill devops-excellence

安装后在 Claude Code 中输入/devops-excellence确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

reference/
cicd.md
containers.md
extended.md
release-strategies.md
templates/
Dockerfile
github-actions.yaml

详细介绍

DevOps 卓越实践

核心原则

  • 左移 — 在 SDLC 早期解决安全和质量问题
  • GitOps — 将 Git 作为基础设施和部署的唯一事实来源
  • 基础设施即代码 — 对所有基础设施进行版本管理并确保可复现
  • 渐进式交付 — 使用功能标志和金丝雀发布逐步推出
  • 不可变基础设施 — 替换正在运行的系统,而不是修改它们
  • 可观测性优先 — 监控与部署和功能相关的指标
  • 策略即代码 — 自动强制执行合规性和安全要求
  • 平台工程 — 构建标准化路径和自助服务门户

硬性规则(必须遵守)

这些规则为强制要求。违反规则意味着该技能未正常工作。

不使用静态凭据

绝不使用长期有效的静态凭据。始终使用 OIDC 或短期令牌。

# ❌ FORBIDDEN: Static AWS credentials
env:
  AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
  AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

# ✅ REQUIRED: OIDC-based authentication
- name: Configure AWS Credentials
  uses: aws-actions/configure-aws-credentials@v4
  with:
    role-to-assume: arn:aws:iam::123456789012:role/GitHubActions
    aws-region: us-east-1
    # No long-lived secrets - uses GitHub OIDC provider
不使用 Root 容器

容器绝不能以 root 身份运行。始终指定非 root 用户。

# ❌ FORBIDDEN: Running as root (default)
FROM node:20
WORKDIR /app
CMD ["node", "server.js"]

# ❌ FORBIDDEN: Explicit root user
USER root

# ✅ REQUIRED: Non-root user with UID > 1000
FROM node:20-alpine
RUN addgroup -g 1001 -S nodejs && \
    adduser -S nodejs -u 1001
USER nodejs
WORKDIR /app
CMD ["node", "server.js"]
镜像中不包含密钥

绝不要将密钥烘焙到 Docker 镜像中。使用运行时注入或密钥管理器。

# ❌ FORBIDDEN: Secrets in build args or ENV
ARG DATABASE_PASSWORD
ENV API_KEY=sk-xxx

# ❌ FORBIDDEN: Copying secret files
COPY .env /app/.env
COPY credentials.json /app/

# ✅ REQUIRED: Mount secrets at runtime
# docker run -v /secrets:/app/secrets:ro myapp
# Or use Kubernetes secrets/configmaps
保护生产部署

生产部署必须经过审批,并限制在 main 分支上。

# ❌ FORBIDDEN: Direct production deploy without protection
deploy:
  runs-on: ubuntu-latest
  steps:
    - run: deploy-to-prod.sh

# ✅ REQUIRED: Environment protection
deploy:
  runs-on: ubuntu-latest
  environment:
    name: production
    url: https://myapp.com
  # Requires: approval + main branch only

快速参考

何时使用什么
场景工具/模式原因
公开的 GitHub 项目GitHub Actions原生集成,公开仓库可免费使用
企业级 GitLabGitLab CI统一平台,提供高级安全扫描
多云 IaCTerraform生态成熟,支持广泛的提供商
以开发者为中心的 IaCPulumi使用真正的编程语言,测试能力更强
Kubernetes 部署ArgoCD + KustomizeGitOps 标准,声明式配置
零停机发布蓝绿或金丝雀可即时回滚
渐进式功能发布功能标志(LaunchDarkly)支持定向投放的渐进式交付
部署策略选择
策略停机时间成本回滚速度复杂度最适用场景
滚动极短低中等低常规更新、注重成本
蓝绿无高(2 倍)即时中等关键系统、便于回滚
金丝雀无中等快高风险缓解、数据驱动
重建长低不适用极低非关键环境,仅用于开发/测试

CI/CD 流水线最佳实践

流水线安全
# Short-lived credentials (not static keys)
- name: Configure AWS Credentials
  uses: aws-actions/configure-aws-credentials@v4
  with:
    role-to-assume: arn:aws:iam::123456789012:role/GitHubActions
    aws-region: us-east-1
    # OIDC provider - no long-lived secrets!

# Protected environments for production
environment:
  name: production
  # Requires approval + restricts to main branch
速度优化
  • 10 分钟构建规则 — 大多数项目应在 <10 分钟内完成构建
  • 并行作业 — 并行运行测试、lint 和安全扫描
  • 缓存依赖项 — 缓存 node_modules、.m2、pip 软件包
  • 条件执行 — 文件未发生更改时跳过作业
# Example: conditional job execution
jobs:
  backend-tests:
    if: contains(github.event.head_commit.modified, 'backend/')
    runs-on: ubuntu-latest
测试金字塔
              /\
             /E2E\        <- Few (slow, expensive)
            /------\
           /Integration\ <- Some (medium speed)
          /------------\
         /  Unit Tests  \ <- Many (fast, cheap)
        /----------------\
  • 70% 单元测试(快速、隔离)
  • 20% 集成测试(服务交互)
  • 10% E2E 测试(完整的用户工作流)
安全扫描集成
# Multi-layer security scanning
jobs:
  security:
    runs-on: ubuntu-latest
    steps:
      # SAST - Static code analysis
      - uses: github/codeql-action/init@v3

      # SCA - Dependency vulnerabilities
      - name: Run Trivy
        uses: aquasecurity/trivy-action@master
        with:
          scan-type: 'fs'
          format: 'sarif'

      # Secret scanning
      - name: Gitleaks
        uses: gitleaks/gitleaks-action@v2

      # Container scanning
      - name: Scan Docker image
        run: trivy image myapp:${{ github.sha }}

Docker 最佳实践

多阶段构建
# Build stage - includes build tools (900MB+)
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production

# Runtime stage - minimal image (<100MB)
FROM node:20-alpine AS runtime
RUN addgroup -g 1001 -S nodejs && \
    adduser -S nodejs -u 1001
WORKDIR /app
COPY --from=builder --chown=nodejs:nodejs /app/node_modules ./node_modules
COPY --chown=nodejs:nodejs . .
USER nodejs
EXPOSE 3000
CMD ["node", "server.js"]
安全强化
  • 非 root 用户 — 始终以非 root 身份运行(UID 1001)
  • 最小化基础镜像 — 使用 alpine、distroless 或 scratch
  • 只读文件系统 — docker run --read-only
  • 层中不包含密钥 — 使用构建密钥或外部保险库
  • 资源限制 — 设置 CPU/内存限制以防止 DoS
  • 签名镜像 — 启用 Docker Content Trust
# Security best practices example
FROM gcr.io/distroless/nodejs20-debian12
COPY --chown=65532:65532 /app /app
USER 65532
EXPOSE 8080
.dockerignore
# Version control
.git
.gitignore

# Dependencies (install fresh in container)
node_modules
vendor/
*.pyc
__pycache__

# Secrets and configs
.env
.env.local
secrets/
*.key
*.pem

# Development files
README.md
Dockerfile
docker-compose.yml
.vscode/
.idea/

# Testing and CI
tests/
*.test.js
.github/

Kubernetes 部署模式

资源管理(合理配置)
# 99.94% of clusters are over-provisioned!
# Average CPU usage: 10%, Memory: 23%
resources:
  requests:
    memory: "128Mi"  # Guaranteed allocation
    cpu: "100m"      # 0.1 CPU cores
  limits:
    memory: "256Mi"  # Maximum allowed
    cpu: "200m"      # Hard cap

# Use tools: Kubecost, Goldilocks, VPA
健康检查
# Liveness: Is container alive?
livenessProbe:
  httpGet:
    path: /health
    port: 8080
  initialDelaySeconds: 30
  periodSeconds: 10
  timeoutSeconds: 5
  failureThreshold: 3

# Readiness: Can it receive traffic?
readinessProbe:
  httpGet:
    path: /ready
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 5
  successThreshold: 1

# Startup: Has initialization completed?
startupProbe:
  httpGet:
    path: /startup
    port: 8080
  failureThreshold: 30  # 30*10s = 5min for slow starts
  periodSeconds: 10
ConfigMaps 和 Secrets
# Group related resources in single manifest
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  APP_ENV: production
  LOG_LEVEL: info
---
apiVersion: v1
kind: Secret
metadata:
  name: app-secrets
type: Opaque
stringData:
  DATABASE_URL: postgresql://user:pass@db:5432/mydb
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  template:
    spec:
      containers:
      - name: app
        envFrom:
        - configMapRef:
            name: app-config
        - secretRef:
            name: app-secrets
安全最佳实践
# Pod Security Standards
securityContext:
  runAsNonRoot: true
  runAsUser: 1000
  fsGroup: 1000
  seccompProfile:
    type: RuntimeDefault
  capabilities:
    drop:
    - ALL

# Network Policies (deny-by-default)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-ingress
spec:
  podSelector: {}
  policyTypes:
  - Ingress

扩展参考

从 ## Infrastructure as Code (Terraform/Pulumi) 开始的详细内容已移至 reference/extended.md,以保持此技能简洁。任务需要已迁移的示例、命令目录、检查清单、平台详情或实现模板时,请加载该参考。

评论

支持 Markdown