基于Jenkins、Docker、Nginx的CI/CD平台自动化构建发布项目实践指南
1. 引言
CI/CD的核心价值
- 持续集成(CI):频繁合并代码到主干,通过自动化构建和测试快速发现错误。
- 持续部署(CD):自动化将已验证代码发布到生产环境,缩短交付周期。
- 自动化价值:减少人为错误,提升发布频率(如从月级到日级),支持敏捷开发和DevOps实践。
Jenkins的核心优势
- 开源灵活:免费且社区支持强大。
- 插件生态:超1,500个插件支持各类工具链(如Git、Docker、Kubernetes)。
- 适用性:兼容Web应用、微服务架构及容器化部署场景。
目标:从零搭建Jenkins平台,实现代码提交→构建→测试→部署的全流程自动化。
2. 准备工作与环境搭建
系统要求
- 硬件:至少4GB内存,50GB磁盘。
- 软件:
- Java环境
- Docker环境
- Maven环境
- Node环境
Java安装
# 步骤1:下载安装(Ubuntu),最新版的jenkins只支持java 17 21
sudo apt update
sudo apt install openjdk-17-jdk
# 步骤2:查看是否安装成功
java -version
Jenkins安装
添加Jenkins仓库
导入Jenkins GPG密钥并添加官方仓库:
curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo tee \
/usr/share/keyrings/jenkins-keyring.asc > /dev/null
echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]" \
https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
/etc/apt/sources.list.d/jenkins.list > /dev/null
安装Jenkins
更新包列表并安装Jenkins:
sudo apt update
sudo apt install jenkins
启动Jenkins服务
启动Jenkins并设置开机自启:
sudo systemctl start jenkins
sudo systemctl enable jenkins
检查服务状态:
sudo systemctl status jenkins
配置防火墙
如果启用了UFW防火墙,需放行8080端口:
sudo ufw allow 8080
sudo ufw enable
访问Jenkins
打开浏览器访问 http://<服务器IP或域名>:8080
。
首次登录需输入初始管理员密码,可通过以下命令获取:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
完成初始化
按照界面指引安装推荐插件并创建管理员账户,即可开始使用Jenkins。
1.下载推荐插件2. 创建管理员
3.刚进入到页面内容是英文的,需要重启一下jenkins,插件和页面才会正常,勾选安装完成后重启Jenkins(空闲时),等会就重启。
常见问题
- 启动:若8080端口被占用,可修改
/etc/default/jenkins
中的HTTP_PORT
。 - 插件安装失败:检查网络连接或更换插件镜像源。
必要插件安装
- 核心插件:Git、Pipeline、Docker
- 安装路径:Manage Jenkins > Plugins > Available 搜索安装
3. Jenkins基础配置
系统设置优化
- 全局安全:启用
Role-based Authorization Strategy
,按角色分配权限(如开发人员仅限构建操作)。
凭证管理
- Git凭证:
- 类型:SSH密钥(推荐)或用户名/密码
点击System
点击全局凭证,配置两个凭证,一个是token配置,一个是账号密码配置(多分支项目只有这权限认证)
构建环境配置
- Maven安装与配置
- 安装
sudo apt update sudo apt install maven
- 验证是否成功
mvn -v
- 查看安装位置
whereis maven
- 最新版的jenkins已经不用配置
- Node安装与配置
- 安装
sudo apt update sudo apt install nodejs npm
- 验证安装是否成功
node -v npm -v
- 最新版的jenkins已经不用配置
- gitHub集成
- 在jenkins的系统管理配置github访问权限
- 复制链接配置在github项目WebHooks
- 找到需要配置的项目点击settings
- 点击WebHooks将链接复制在payload URL,其他按图片填写
- 集成后可以根据推送自动进行构建发布, 部署结果更新github上。
- 在jenkins的系统管理配置github访问权限
4. 创建自动化构建管道
定义Pipeline作业
-
选择Pipeline类型:推荐使用
多分支流水线
(可版本控制Jenkinsfile)。
-
进入配置页面找到分支源,点击增加源选择github配置项目链接,github访问权限,添加根据名称过滤导入指定分支。
-
保存后jenkins就会扫描仓库,如果没扫描到可以在项目跟目录添加Jenkinsfile配置
- 根据名称过滤会为我们生成多分支流水线
5. 自动化测试与质量保障
测试阶段集成
- 单元测试:Maven中配置JUnit,生成XML报告(
mvn test
)。 - UI测试:集成Selenium,通过Docker运行浏览器容器。
代码质量检查
- 集成SonarQube:
stage('SonarQube Analysis') { steps { withSonarQubeEnv('SonarQube-Server') { sh 'mvn sonar:sonar' } } }
- 报告可视化:安装
SonarQube Plugin
,在Jenkins面板展示覆盖率。
测试环境部署
- 使用Docker插件自动部署到测试环境:
sh 'docker build -t my-app:test .' sh 'docker run -d -p 8080:8080 my-app:test'
6. 自动化部署与发布
部署策略
- 蓝绿部署:通过负载均衡切换流量(需集成Nginx/HAProxy)。
- 金丝雀发布:逐步将流量导入新版本(Kubernetes原生支持)。
部署工具集成
- SSH部署:使用
Publish Over SSH
插件推送Jar包到服务器:sshPublisher( publishers: [ sshPublisherDesc( configName: 'prod-server', transfers: [sshTransfer(execCommand: 'systemctl restart my-app')] ) ] )
- Kubernetes部署:
stage('Deploy to K8s') { steps { withKubeConfig([credentialsId: 'k8s-creds']) { sh 'kubectl apply -f k8s-deployment.yaml' } } }
发布后验证
- 健康检查:集成Prometheus指标,自动触发
kubectl rollout undo
回滚。
8. 最佳实践与常见问题
安全实践
- 最小权限原则:为每个作业分配独立凭证。
- 插件审核:定期更新插件,禁用未经验证的来源。
常见问题解决
- 构建失败:检查日志中的
mvn
依赖错误或测试用例失败。 - 网络问题:在
/etc/default/jenkins
中配置HTTP代理。
9. 案例分析与总结
实战案例:电商应用CI/CD流水线
- 流程:
- 代码提交 → 单元测试 → SonarQube扫描 → Docker镜像构建 → 部署到Kubernetes测试集群 → 人工审批 → 生产发布。
- 成果:
- 构建时间从20分钟降至5分钟,生产环境部署频率提升300%。
总结
- Jenkins通过可扩展的流水线,成为CI/CD的核心引擎。
- 未来趋势:AI预测构建失败、Serverless Jenkins动态伸缩资源。
资源推荐
通过本指南,您可快速搭建企业级CI/CD平台,实现“代码即产品”的自动化交付闭环。