Skill 技能系统完全指南(四):实战 Skill——DevOps 部署
·
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 配置文件,并说明:
- 触发条件
- 每个 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)
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 的配合(待写)
更多推荐

所有评论(0)