从零搭建 Docker + Jenkins CI/CD 流水线:实现项目自动化构建与部署
在DevOps实践中,持续集成/持续部署(CI/CD)是提升研发效率、保障软件质量的核心引擎。Jenkins作为开源自动化服务器的标杆,与Docker容器化技术的深度结合,能够彻底解决环境不一致、部署流程繁琐等痛点,让“代码提交即部署”成为现实。本文将以实战为核心,从环境准备到流水线搭建,手把手带你完成一套可落地的CI/CD方案。
一、环境准备:搭建稳定运行的基石
在开启CI/CD之旅前,需先完成基础环境的搭建,确保Jenkins与Docker能够协同工作。
1. 核心环境清单
-
代码仓库:推荐使用GitHub、GitLab或Bitbucket作为远程仓库,本地开发机需安装Git客户端,通过
git --version验证安装状态。 -
Java环境:Jenkins基于Java开发,需安装OpenJDK 11或更高版本,执行
java -version确认环境正常。 -
Docker环境:在构建服务器上安装Docker引擎,通过
docker -version验证安装,安装后建议将当前用户加入docker组,避免频繁使用sudo带来的权限问题。 -
Jenkins:可选择独立安装或容器化部署,实战中推荐容器化部署,兼顾便捷性与维护效率。
OpenJDK经认证的可靠来源:
- Oracle 官方 OpenJDK 下载:https://jdk.java.net/
- Eclipse Temurin(Adoptium):https://adoptium.net/ 首选推荐(国内 / 国际都稳)
2. 容器化部署Jenkins
容器化部署Jenkins能避免环境依赖冲突,且便于快速迁移与备份,具体步骤如下:
- 拉取Jenkins镜像:执行命令拉取最新稳定版镜像,确保版本兼容性与长期支持。
docker pull jenkins/jenkins:lts
注:目前默认安装的版本是2.319.1,大部分必要插件都无法安装,所以建议手动安装最新版本是Jenkins 2.541.3。
- 启动Jenkins容器:通过以下命令启动容器,同时挂载数据卷防止配置丢失,并映射端口保障外部访问。
docker run -d -p 8080:8080 -p 50000:50000 \ -v jenkins_home:/var/jenkins_home \ --name jenkins jenkins/jenkins:lts
- 获取初始密码:首次启动后,通过容器日志或命令获取管理员密码,用于后续登录验证。
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
- 完成初始化配置:访问
http://localhost:8080,输入初始密码后,选择安装推荐插件(懂的就自定义选择,不熟的默认选择,安装成功后可以到插件管理进行调整),创建管理员账户,即可进入Jenkins主界面。
二、Jenkins核心配置:让工具“听指挥”
Jenkins的强大依赖于插件与工具的合理配置,这一步是流水线顺畅运行的关键。
1. 关键插件安装
在“Manage Jenkins”→“Manage Plugins”中,搜索并安装以下核心插件,保障流水线核心功能:
-
Docker Pipeline:支持在流水线中直接操作Docker,实现镜像构建与容器管理。
-
Pipeline:实现流水线脚本的编写与管理,支持“流水线即代码”的核心能力。
-
Git:对接代码仓库,实现代码拉取与版本控制。
-
Credentials Binding:安全管理各类凭证,避免敏感信息硬编码。
-
Maven Integration:针对Java项目,支持Maven构建流程的自动化。
附Jenkins 2.541.3版本安装插件截图,右上角“设置”图标——Plugins,左侧“Available plugins”菜单进入,搜索插件名,选中所有需要安装的插件后再点Install按钮安装即可。

2. 全局工具配置
进入“Manage Jenkins”→“Global Tool Configuration”,完成核心工具的配置:
-
JDK:添加JDK 11,勾选“Install automatically”,确保构建环境具备Java运行能力。
-
Maven:添加Maven 3.x,同样勾选自动安装,满足Java项目的依赖管理与构建需求。
-
Docker:无需额外配置,确保服务器已安装Docker,Jenkins可通过Docker守护进程直接调用相关命令。
注:Jenkins 2.541.3版本中“Global Tool Configuration”更名为“Tools”,如下图。

3. 凭证管理配置
为保障与代码仓库、镜像仓库的交互安全,需添加核心凭证:
-
代码仓库凭证:在“Manage Jenkins”→“Manage Credentials”中,添加“Username with password”类型的凭证,填写代码仓库的用户名与密码,用于拉取代码。
-
镜像仓库凭证:若需推送镜像至Docker Hub或私有仓库,重复上述步骤,添加对应的仓库账号密码,避免在流水线中暴露敏感信息。
三、构建流水线:从代码到镜像的自动化实践
以Java项目为例,我们将搭建一条从代码提交到Docker镜像构建的完整流水线,实现核心流程的自动化。
1. 创建Pipeline项目
在Jenkins中新建“Pipeline”类型的项目,选择“Pipeline script from SCM”,将流水线脚本纳入代码仓库管理,实现版本控制与协同编辑。
2. 编写Jenkinsfile脚本
在项目根目录创建Jenkinsfile,定义流水线的核心阶段,实现标准化流程。
pipeline { agent any stages { // 代码检出阶段 stage('Checkout') { steps { git branch: 'main', url: 'https://github.com/your-repo/your-project.git' } } // 构建阶段 stage('Build') { steps { sh 'mvn clean package -DskipTests' } } // Docker镜像构建阶段 stage('Build Docker Image') { steps { script { docker.build("${PROJECT_NAME}:${env.BUILD_ID}") } } } // 镜像推送阶段(可选) stage('Push Image') { steps { script { docker.withRegistry("https://${DOCKER_REGISTRY}", 'registry-credential') { dockerImage.push() dockerImage.push('latest') } } } } } }
3. 配置触发方式
在“Build Triggers”中,可根据需求选择触发方式:
-
手动触发:适合测试阶段,通过点击“Build Now”手动启动流水线。
-
定时触发:设置固定时间周期,定期执行流水线,适合批量构建场景。
-
代码提交触发:配置Webhook,当代码仓库提交代码时,自动触发流水线,实现真正的持续集成。
四、进阶部署:从镜像到环境交付
完成镜像构建后,需将镜像部署到目标环境,实现持续部署的闭环。
1. Docker Compose部署(轻量环境)
对于本地测试或小型项目,可通过Docker Compose快速启动服务。在流水线中添加部署阶段,执行Compose命令:
stage('Deploy to Staging') {
steps {
sh 'docker-compose -f docker-compose-staging.yml up -d'
}
}
对应的docker-compose-staging.yml可定义服务依赖与端口映射,快速搭建测试环境。
2. Kubernetes部署(生产环境)
对于生产环境,Kubernetes提供更强大的编排能力,支持滚动更新与回滚。在流水线中集成kubectl命令,实现生产环境部署:
stage('Deploy to Production') {
when {
branch 'main'
}
steps {
script {
// 推送镜像至仓库
docker.build("my-registry.com/myapp:${env.BUILD_ID}")
docker.push("my-registry.com/myapp:${env.BUILD_ID}")
// 更新Kubernetes部署
sh "kubectl set image deployment/myapp myapp=my-registry.com/myapp:${env.BUILD_ID}"
}
}
}
五、流水线验证与扩展
完成上述步骤后,手动触发一次构建,观察各阶段执行状态,排查可能的问题。同时,可根据项目需求扩展流水线:
-
添加测试阶段:集成单元测试与集成测试,输出测试报告,保障代码质量。
-
集成安全扫描:使用Trivy等工具扫描Docker镜像,提前发现安全漏洞。
-
优化触发策略:根据代码变更路径,配置差异化触发规则,减少不必要的构建。
通过这套实战方案,你已搭建起一套基础但完整的CI/CD流水线。后续可根据团队规模与项目复杂度,逐步引入并行构建、蓝绿部署等进阶能力,让研发效能持续提升。
优化过程中,需始终围绕团队的实际需求,从核心流程入手,持续度量、反馈与改进,才能真正释放DevOps的潜力,让高质量软件的快速交付成为常态。

浙公网安备 33010602011771号