Jenkins CI/CD
自托管 CI/CD,Jenkinsfile、插件和分布式 agent。
CI/CD高级
为什么
Jenkins 最可扩展 CI/CD,1800+ 插件。Jenkinsfile(Groovy DSL)定义流水线即代码。自托管完全控制 runner。
何时使用
复杂企业 CI、本地需求和已用团队用 Jenkins。新云原生避免(用 GH Actions)。
如何做
1. 安装 — Jenkins WAR 或 Docker
2. 流水线 — 仓库中 Jenkinsfile
3. Agent — 分布式构建 agent
4. 插件 — 安装所需插件
5. 凭证 — Jenkins 凭证存储
6. 多分支 — 自动发现分支
7. 声明式 — pipeline { } 语法
示例
# Jenkinsfile
pipeline {
agent any
stages {
stage('Build') {
steps { sh 'npm ci && npm run build' }
}
stage('Test') {
steps { sh 'npm test' }
}
stage('Deploy') {
when: { branch 'main' }
steps {
withCredentials([string(credentialsId: 'vercel-token', variable: 'TOKEN')]) {
sh 'npx vercel --prod --token $TOKEN'
}
}
}
}
}
# Docker 中运行 Jenkins
docker run -d -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts
常见问题
- ⚠插件地狱 — 插件过多,慢且脆弱,最小化插件
- ⚠Jenkinsfile 语法错误 — 用 Jenkins VS Code 扩展验证
- ⚠环境间配置漂移 — 使用基础设施即代码(Terraform/Pulumi)保持 dev/staging/prod 一致
最佳实践
- ✓用声明式流水线 — 更清晰语法,更好 IDE 支持
- ✓最小化插件 — 每插件加风险,仅装所需
- ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求