Angh31/jenkins-devsecops-pipeline
GitHub: Angh31/jenkins-devsecops-pipeline
基于 Jenkins 的声明式 DevSecOps 流水线示例,在 Node.js 应用上集成 SCA、SAST、容器扫描与 DAST 九个安全阶段的自动化检测与门禁控制。
Stars: 0 | Forks: 0
# 🔐 Jenkins DevSecOps Pipeline
声明式 CI/CD Pipeline,集成了 9 个安全阶段 —— SCA、SAST、Trivy 和 DAST —— 基于 Node.js 的 Todo API,包含用于检测演示的故意设置的安全漏洞。
## Pipeline 概述
```
Checkout → Build → SCA → Test → SAST → Docker Build & Deploy → Trivy → Security Gate → DAST (ZAP)
```
| 阶段 | 工具 | 功能 |
|---|---|---|
| Checkout | Jenkins SCM | 从 GitHub 下载代码 |
| Build | Node.js / npm | 安装依赖 |
| SCA | npm audit | 检测依赖中的漏洞 |
| Test | Jest + Supertest | 执行 3 个 REST API 的自动化测试 |
| SAST | Semgrep `p/nodejs-security` | 扫描源代码中的漏洞 |
| Docker Build & Deploy | Docker | 构建镜像并在 3001 端口部署容器 |
| Trivy | aquasec/trivy | 扫描 Docker 镜像中的漏洞 |
| Security Gate | Python3 | 如果超出 CRITICAL/HIGH 阈值则使 Pipeline 失败 |
| DAST | OWASP ZAP | 针对已部署应用进行动态分析 |
## Pipeline 图表
```
┌──────────┐ ┌───────┐ ┌─────┐ ┌──────┐ ┌────────┐
│ Checkout │→ │ Build │→ │ SCA │→ │ Test │→ │ SAST │
└──────────┘ └───────┘ └─────┘ └──────┘ └────────┘
│
▼
┌─────────────────┐ ┌────────┐ ┌───────────────┐
│ Docker Build & │← │ │ │ semgrep- │
│ Deploy │ │ │ │ report.json │
└─────────────────┘ └────────┘ └───────────────┘
│
▼
┌────────┐ ┌─────────────────┐ ┌──────────┐
│ Trivy │→ │ Security Gate │→ │ DAST ZAP │
│ Image │ │ CRITICAL: 0 max │ │ │
│ Scan │ │ HIGH: 3 max │ │ │
└────────┘ └─────────────────┘ └──────────┘
│ │ │
▼ ▼ ▼
trivy-report ✅ PASS / ❌ FAIL zap-report
.json .html/.json
```
## Security Gate — 标准
| 严重性 | 最大阈值 | 超出时的操作 |
|---|---|---|
| CRITICAL | 0 | ❌ Pipeline 失败 |
| HIGH | 3 | ❌ Pipeline 失败 |
| MEDIUM / LOW | 无限制 | ⚠️ 仅报告 |
## 技术栈







## SAST — 检测到的漏洞
该应用程序包含一个故意用于演示的带有 `eval()` 的 endpoint:
```
// ⚠️ Vulnerabilidad intencional — detectada por Semgrep
app.get('/eval', (req, res) => {
const result = eval(req.query.code);
res.json({ result });
});
```
Semgrep 检测并在 `semgrep-report.json` 中报告该漏洞,该文件在每次运行时作为 artifact 归档。
## 项目结构
```
jenkins-devsecops-pipeline/
├── src/
│ └── app.js # API REST con vulnerabilidad intencional
├── tests/
│ └── app.test.js # 3 pruebas con Jest + Supertest
├── Dockerfile # Imagen Node.js 18 Alpine
├── Jenkinsfile # Pipeline declarativo (9 stages)
└── package.json
```
## 如何复现
```
git clone https://github.com/Angh31/jenkins-devsecops-pipeline.git
cd jenkins-devsecops-pipeline
# 在 Jenkins 中配置 pipeline 指向 Jenkinsfile
# 执行 — app 将在以下位置可用:
curl http://localhost:3001/todos
```
## API Endpoints
| 方法 | Endpoint | 描述 |
|---|---|---|
| GET | `/todos` | 列出所有任务 |
| POST | `/todos` | 创建新任务 |
| DELETE | `/todos/:id` | 删除任务 |
| GET | `/eval` | ⚠️ 漏洞 Endpoint —— 仅用于 SAST 演示 |
## 自动化测试
```
✓ GET /todos - retorna array vacío al inicio
✓ POST /todos - crea un todo correctamente
✓ POST /todos - falla si no hay title
```
标签:DAST, DevSecOps, Jenkins, MITM代理, SAST, 上游代理, 人体姿态估计, 恶意软件分析, 盲注攻击, 自定义脚本, 请求拦截