title: Skill 技能系统完全指南(四)实战 Skill:DevOps 部署——Docker、Nginx 与 CI/CD
date: 2026-07-10
category: AI 开发工具
tags: [Claude Code, Skill, DevOps, Docker, CI/CD, 部署]

Skill 技能系统完全指南(四):实战 Skill——DevOps 部署

从构建到部署,从 Docker 容器化到 CI/CD 流水线,一个 Skill 搞定发布全流程。本篇手把手教你编写一个生产级别的 DevOps 部署 Skill。

前言

开发完成的代码怎么跑到服务器上?传统的流程是:

本地构建 → 打镜像 → 推仓库 → SSH 到服务器 → docker-compose up

每一步都需要记忆命令、切换终端、手动确认。如果用 Skill 来编排这个流程,你只需要说一句:

帮我部署到测试环境

剩下的全部交给 Claude。

一、DevOps 部署 Skill 的设计

1.1 需求分析

一个完整的部署 Skill 需要覆盖:

阶段 内容
构建 前端构建、后端打包
镜像 Docker build、tag、push
部署 docker-compose up、kubectl apply
验证 健康检查、端口监听、页面可访问
回滚 回退到上一个版本

1.2 环境适配

不同的部署环境有不同的配置:

环境: 测试 / 预发 / 生产
部署方式: docker-compose / kubernetes / 裸机
后端: Spring Boot jar / Docker 镜像
前端: Nginx 静态托管 / 独立容器

Skill 需要支持环境切换。

二、完整的 DevOps 部署 Skill

---
name: devops-deploy
description: 自动化部署全流程:构建、打包、部署、验证、回滚
trigger: 部署, deploy, 发布, release, docker, 构建镜像
tools: [Bash, Grep, Read, WebFetch]
---

# DevOps 部署 Skill

## 角色定义

你是一个资深 DevOps 工程师,精通 Docker、Nginx、CI/CD 流水线。
你的职责是将代码安全、可靠地部署到目标环境。

## 支持的部署目标

| 环境 | 地址 | 用途 |
|------|------|------|
| 本地 | localhost:5173 / localhost:8080 | 开发调试 |
| 测试 | 测试服务器 IP | 功能验证 |
| 预发 | 预发服务器 IP | 上线前验证 |
| 生产 | 生产服务器 IP | 正式环境 |

## 部署流程

### Step 1: 环境确认

当前分支:{git branch}
最近提交:{git log -1 --oneline}
目标环境:{用户指定或默认测试环境}


如果当前分支不是 `main` 或 `develop`,提醒用户确认:

⚠️ 当前在 {branch} 分支,确定要从此分支部署吗?
通常只有 main/develop 分支可以部署到测试/生产环境。


### Step 2: 前端构建

```bash
cd frontend
pnpm install --frozen-lockfile
pnpm build

构建产物在 frontend/dist/。检查构建是否成功:

  • 构建成功 → 继续
  • 构建失败 → 报告错误信息,询问是否修复后重试

Step 3: 后端构建

cd ../asset-server
mvn clean package -DskipTests -pl asset-server -am

构建产物在 asset-server/target/asset-server.jar

Step 4: Docker 镜像构建与推送

# 打标签
IMAGE_TAG=$(date +%Y%m%d%H%M%S)
docker tag frontend-dist registry/{env}/frontend:{IMAGE_TAG}
docker tag asset-server-jar registry/{env}/asset-server:{IMAGE_TAG}

# 推送
docker push registry/{env}/frontend:{IMAGE_TAG}
docker push registry/{env}/asset-server:{IMAGE_TAG}

Step 5: 部署到目标环境

方式 A:docker-compose 部署

ssh {server} "cd /opt/deploy && docker-compose pull && docker-compose up -d"

方式 B:Kubernetes 部署

ssh {server} "cd /opt/k8s && kubectl set image deployment/asset-server \
  asset-server=registry/{env}/asset-server:{IMAGE_TAG} && \
  kubectl rollout status deployment/asset-server"

Step 6: 健康检查

# 等待服务启动
sleep 10

# 检查后端
curl -f http://{server}:8080/actuator/health || echo "BACKEND_UNHEALTHY"

# 检查前端
curl -f http://{server}:80/dist/index.html || echo "FRONTEND_UNHEALTHY"

Step 7: 部署报告

🚀 部署报告
━━━━━━━━━━━━━━━━━━━━━

环境:测试环境 (192.168.31.XX)
分支:develop
提交:a1b2c3d - 修复用户登录超时问题

[1/5] 前端构建    ✅ (45s)
[2/5] 后端构建    ✅ (120s)
[3/5] 镜像推送    ✅ (15s)
[4/5] 服务部署    ✅ (30s)
[5/5] 健康检查    ✅

访问地址:http://192.168.31.XX:5173
镜像版本:20260710103000

━━━━━━━━━━━━━━━━━━━━━

回滚流程

如果部署后发现问题,执行回滚:

回滚到上一个版本

Skill 自动执行:

# docker-compose 回滚
ssh {server} "cd /opt/deploy && docker-compose down && \
  docker-compose up -d --force-recreate"

# k8s 回滚
ssh {server} "cd /opt/k8s && kubectl rollout undo deployment/asset-server"

异常处理

异常场景 处理方式
构建失败 报告错误,不执行后续步骤
SSH 连接失败 提示检查网络和凭据
健康检查不通过 报告服务日志,建议回滚
磁盘空间不足 提示清理旧镜像 docker image prune
端口被占用 提示检查 lsof -i :{port}

安全注意事项

  • 服务器密码和 SSH 密钥不写入 Skill 文件,通过环境变量或 SSH agent 传递
  • 生产环境部署需要二次确认:确定要部署到生产环境吗?(y/N)
  • 部署前自动检查是否有未提交的代码更改

## 三、实战使用示例

### 3.1 部署到测试环境

/devops-deploy 部署到测试环境


Claude 自动执行完整的构建 → 部署 → 验证流程。

### 3.2 只构建不部署

帮我构建前端和后端,但不部署


Skill 识别到"不部署"意图,执行 Step 1-3 后停止。

### 3.3 回滚

刚才的部署有问题,回滚到上一个版本


Skill 执行回滚流程。

### 3.4 查看部署历史

最近部署了哪些版本?


Skill 读取 `.claude/tmp/deploy-history.log`,列出最近的部署记录。

## 四、Nginx 配置管理 Skill

前端部署通常由 Nginx 托管静态文件。可以单独编写一个 Nginx 配置 Skill:

```markdown
---
name: nginx-config
description: 生成和管理 Nginx 配置文件,包括反向代理、缓存、SSL
trigger: Nginx, nginx, 反向代理, 静态托管, SSL配置
---

# Nginx 配置 Skill

## 角色定义

你是一个资深 Nginx 配置专家。

## 常见任务

### 1. 前端静态资源托管

```nginx
server {
    listen 80;
    server_name your-domain.com;
    root /usr/share/nginx/html;
    index index.html;

    # SPA 路由支持
    location / {
        try_files $uri $uri/ /index.html;
    }

    # 静态资源缓存
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|woff2)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
    }
}

2. 反向代理后端 API

location /api/ {
    proxy_pass http://backend:8080/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_connect_timeout 30s;
    proxy_read_timeout 60s;
}

3. SSL 证书配置

server {
    listen 443 ssl http2;
    server_name your-domain.com;

    ssl_certificate     /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;
    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_ciphers         HIGH:!aNULL:!MD5;
}

# HTTP 自动跳转 HTTPS
server {
    listen 80;
    server_name your-domain.com;
    return 301 https://$server_name$request_uri;
}

输出

根据用户需求生成完整的 nginx.conf 片段,
并说明每个配置项的作用。


## 五、CI/CD 集成 Skill

### 5.1 GitHub Actions 集成

```markdown
---
name: ci-cd-config
description: 生成和维护 CI/CD 配置文件(GitHub Actions、GitLab CI、Jenkinsfile)
trigger: CI/CD, 持续集成, 流水线, github-actions, gitlab-ci
---

# CI/CD 配置 Skill

## 角色定义

你是一个 CI/CD 流水线设计专家。

## 常见任务

### GitHub Actions 工作流

根据用户需求生成 `.github/workflows/` 下的 YAML 文件:

**构建+测试工作流**:
```yaml
name: Build and Test
on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

jobs:
  frontend:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: pnpm/action-setup@v3
      - run: pnpm install
      - run: pnpm test
      - run: pnpm build

  backend:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v4
        with:
          java-version: '8'
          distribution: 'temurin'
      - run: mvn clean package -DskipTests

部署工作流

name: Deploy
on:
  workflow_run:
    workflows: ["Build and Test"]
    types: [completed]
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    if: ${{ github.event.workflow_run.conclusion == 'success' }}
    steps:
      - uses: appleboy/ssh-action@v1
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USER }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          script: |
            cd /opt/deploy
            docker-compose pull
            docker-compose up -d

输出

生成完整的 CI/CD 配置文件,并说明:

  1. 触发条件
  2. 每个 Job 的作用
  3. 需要配置的 Secret

## 六、Dockerfile 生成 Skill

```markdown
---
name: dockerfile-gen
description: 为前端 Vue 项目或后端 Spring Boot 项目生成最优的 Dockerfile
trigger: Dockerfile, 容器化, docker build, 多阶段构建
---

# Dockerfile 生成 Skill

## 角色定义

你是一个 Docker 多阶段构建专家。

## 前端 Dockerfile(Vue 3 + Nginx)

```dockerfile
# 构建阶段
FROM node:20-alpine AS builder
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN corepack enable && pnpm install --frozen-lockfile
COPY . .
RUN pnpm build

# 运行阶段
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

后端 Dockerfile(Spring Boot)

FROM eclipse-temurin:8-jre-alpine
WORKDIR /app
COPY target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

优化要点

  • 使用 Alpine 基础镜像减小体积
  • 多阶段构建不暴露构建工具
  • 合理使用 .dockerignore
  • 层缓存优化(先 COPY package.json,再 COPY 源代码)

## 七、这一章的核心心得

1. **部署 Skill 的核心价值**——把繁琐的构建、部署、验证流程自动化
2. **支持多环境**——通过配置区分测试/预发/生产环境
3. **回滚是必须的**——任何部署 Skill 都要包含回滚能力
4. **Nginx 配置可以独立成 Skill**——反向代理、SSL、缓存都是高频需求
5. **CI/CD 集成是进阶**——GitHub Actions / GitLab CI 的配置也可以封装成 Skill
6. **Dockerfile 生成是刚需**——前后端的最佳实践 Dockerfile 可以直接复用

## 八、下一步

DevOps 部署 Skill 解决了"代码怎么跑起来"的问题。但代码跑起来之前,还有一个关键环节——**代码质量**。

下一篇我们将编写代码质量相关的 Skill,包括 Code Review、Lint 检查、测试覆盖率分析等,确保部署上去的代码是高质量的。

---

*系列目录:*
1. ~~初识 Skill 系统——什么是 Skill?为什么需要 Skill?~~
2. ~~自定义 Skill 开发——从 0 到 1 编写自己的 Skill~~
3. ~~Skill 编排与组合——多个 Skill 串联工作,打造自动化流程~~
4. ~~实战 Skill:DevOps 部署——编写 Docker/Nginx/CI-CD 相关的部署 Skill~~ ← 本篇
5. 实战 Skill:代码质量——编写 Code Review / Lint / 测试覆盖率 Skill(待写)
6. 实战 Skill:文档生成——编写 API 文档 / 技术手册 / Changelog 生成 Skill(待写)
7. Skill 分享与复用——团队共享 Skill 库、开源 Skill 生态、版本管理(待写)
8. Skill 进阶技巧——条件触发、多语言支持、与 Agent/Workflow 的配合(待写)

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐