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 环境适配
不同的部署环境有不同的配置:
yaml
环境: 测试 / 预发 / 生产
部署方式: docker-compose / kubernetes / 裸机
后端: Spring Boot jar / Docker 镜像
前端: Nginx 静态托管 / 独立容器
Skill 需要支持环境切换。
二、完整的 DevOps 部署 Skill
markdown
---
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: 后端构建
bash
cd ../asset-server
mvn clean package -DskipTests -pl asset-server -am
构建产物在 asset-server/target/asset-server.jar。
Step 4: Docker 镜像构建与推送
bash
# 打标签
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 部署
bash
ssh {server} "cd /opt/deploy && docker-compose pull && docker-compose up -d"
方式 B:Kubernetes 部署
bash
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: 健康检查
bash
# 等待服务启动
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 自动执行:
bash
# 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
nginx
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 证书配置
nginx
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
部署工作流:
yaml
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 配置文件,并说明:
-
触发条件
-
每个 Job 的作用
-
需要配置的 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)
dockerfile
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 源代码)
七、这一章的核心心得
- 部署 Skill 的核心价值------把繁琐的构建、部署、验证流程自动化
- 支持多环境------通过配置区分测试/预发/生产环境
- 回滚是必须的------任何部署 Skill 都要包含回滚能力
- Nginx 配置可以独立成 Skill------反向代理、SSL、缓存都是高频需求
- CI/CD 集成是进阶------GitHub Actions / GitLab CI 的配置也可以封装成 Skill
- Dockerfile 生成是刚需------前后端的最佳实践 Dockerfile 可以直接复用
八、下一步
DevOps 部署 Skill 解决了"代码怎么跑起来"的问题。但代码跑起来之前,还有一个关键环节------代码质量。
下一篇我们将编写代码质量相关的 Skill,包括 Code Review、Lint 检查、测试覆盖率分析等,确保部署上去的代码是高质量的。
系列目录:
初识 Skill 系统------什么是 Skill?为什么需要 Skill?自定义 Skill 开发------从 0 到 1 编写自己的 SkillSkill 编排与组合------多个 Skill 串联工作,打造自动化流程实战 Skill:DevOps 部署------编写 Docker/Nginx/CI-CD 相关的部署 Skill← 本篇- 实战 Skill:代码质量------编写 Code Review / Lint / 测试覆盖率 Skill(待写)
- 实战 Skill:文档生成------编写 API 文档 / 技术手册 / Changelog 生成 Skill(待写)
- Skill 分享与复用------团队共享 Skill 库、开源 Skill 生态、版本管理(待写)
- Skill 进阶技巧------条件触发、多语言支持、与 Agent/Workflow 的配合(待写)