项目背景
在构建 Amazon Prime 项目的过程中,我实现了一个从源码管理到容器镜像推送的全自动化 CI/CD 流程,目标是:
- 实现每次提交后自动测试、构建、扫描、推送镜像
- 将 Node.js 应用持续集成并部署到 AWS ECR
- 集成安全扫描(Trivy)与代码质量分析(SonarQube)
- 支持 DevSecOps 思维:交付可观测、可追溯、安全的部署流程
📦 技术栈
- CI/CD 平台:Jenkins
- 容器化:Docker
- 云部署平台:AWS ECR + CLI
- 质量分析:SonarQube
- 安全扫描:Trivy
- 语言:Node.js (npm)
🧱 核心架构图(简化版)
nginx
GitHub → Jenkins CI/CD → SonarQube & Trivy → Docker Build → AWS ECR → EKS(可扩展)
🧩 关键步骤拆解
✅ 1. GitHub Checkout
groovy
stage('1. Git Checkout') {
steps {
git branch: 'main', url: 'https://github.com/babylink1/DevopsProject2.git'
}
}
- 每次 Pipeline 运行,自动拉取主分支最新代码。
✅ 2. SonarQube 静态分析
groovy
stage('2. SonarQube Analysis') {
steps {
withSonarQubeEnv('sonar-server') {
sh "${SCANNER_HOME}/bin/sonar-scanner -Dsonar.projectKey=amazon-prime -Dsonar.projectName=amazon-prime"
}
}
}
- 早期发现代码结构、可维护性和漏洞风险。
- 使用
withSonarQubeEnv与服务器绑定环境变量。
✅ 3. 安全扫描(Trivy)
groovy
stage('Trivy Scan') {
steps {
sh 'trivy fs . > trivy-scan-results.txt'
}
}
- 检查依赖和镜像中的潜在漏洞。
- 可集成为 fail-fast 阶段。
✅ 4. 构建 Docker 镜像
groovy
stage('Docker Image Build') {
steps {
sh "docker build -t ${params.ECR_REPO_NAME} ."
}
}
- 使用参数化构建,灵活控制镜像名称。
✅ 5. 登录 & 创建 ECR 仓库(自动判断)
groovy
stage('Create ECR Repo & Login') {
steps {
withCredentials([...]) {
sh '''
aws ecr describe-repositories --repository-names ${params.ECR_REPO_NAME} || \
aws ecr create-repository --repository-name ${params.ECR_REPO_NAME}
aws ecr get-login-password | docker login --username AWS --password-stdin ${params.AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com
'''
}
}
}
- 智能判断是否需要创建仓库,避免重复操作。
✅ 6. 镜像 Tag & Push
groovy
stage('Push to ECR') {
steps {
sh '''
docker tag ${params.ECR_REPO_NAME} ${params.AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/${params.ECR_REPO_NAME}:$BUILD_NUMBER
docker push ${params.AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/${params.ECR_REPO_NAME}:$BUILD_NUMBER
'''
}
}
- 使用
$BUILD_NUMBER作为版本号,支持版本管理。
✅ 7. 清理 Jenkins 环境
groovy
stage('Cleanup') {
steps {
sh '''
docker rmi ${params.AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/${params.ECR_REPO_NAME}:$BUILD_NUMBER
'''
}
}
- 保持 Jenkins 节点干净,减少磁盘压力。
🎯 实战价值
这个 Pipeline 并不只是“能跑通”,它体现了一个完整 DevOps 系统的能力:
- 自动化部署 + 可追踪版本控制
- 集成代码质量、安全、合规流程
- 云服务接入 + 多环境扩展能力(未来可扩展到 EKS、Helm)
- 使用参数化与 IAM 权限隔离,安全性更强
💡 小贴士(你可以借鉴的经验)
- 用
params参数定义灵活性,可支持多环境部署(dev/test/prod) - 所有 AWS CLI 操作都需绑定 IAM 最小权限
- 推荐将 Trivy 报告集成入 HTML 报告,可用插件渲染