Jenkins + Docker 一键打包部署项目指南
通过Jenkins流水线集成Docker实现自动化构建、测试和部署,避免常见踩坑点。以下是完整流程:
一、环境准备(前置条件)
-
服务器基础环境
- 安装JDK 11+:
$ sudo apt install openjdk-11-jdk
- 安装Docker:
$ curl -fsSL https://get.docker.com | bash
- 配置Docker用户组:
$ sudo usermod -aG docker jenkins
- 安装JDK 11+:
-
Jenkins安装与配置
# 安装Jenkins wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add - sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list' sudo apt update && sudo apt install jenkins
- 关键插件:安装
Docker Pipeline
、GitHub Integration
、Blue Ocean
- 关键插件:安装
二、项目配置(核心步骤)
-
编写Dockerfile(置于项目根目录)
FROM openjdk:11 WORKDIR /app COPY target/*.jar app.jar # 假设Maven构建输出JAR EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"]
-
Jenkinsfile流水线脚本(置于项目根目录)
pipeline { agent any stages { stage('Build') { steps { sh 'mvn clean package' # Maven构建,其他项目替换对应命令 } } stage('Build Docker Image') { steps { script { docker.build("my-app:${env.BUILD_ID}") } } } stage('Deploy') { steps { sh 'docker stop my-app || true' # 停止旧容器(忽略错误) sh 'docker rm my-app || true' sh 'docker run -d -p 8080:8080 --name my-app my-app:${env.BUILD_ID}' } } } }
三、Jenkins任务创建
- 新建流水线任务
- 类型:选择 Pipeline
- 定义:
Pipeline script from SCM
→ 配置Git仓库地址
- 配置Webhook(可选)
- GitHub仓库 → Settings → Webhooks → 添加
http://<JENKINS_URL>/github-webhook/
- GitHub仓库 → Settings → Webhooks → 添加
四、避坑指南
- 权限问题
- 问题:Jenkins用户无法执行Docker命令
- 解决:
$ sudo usermod -aG docker jenkins
并重启Jenkins
- 端口冲突
- 问题:旧容器未停止导致新容器启动失败
- 解决:流水线中强制停止旧容器(见上方
docker stop ... || true
)
- 镜像版本管理
- 建议:使用
${env.BUILD_ID}
作为标签,避免覆盖生产镜像
- 建议:使用
- 构建缓存
- 在
docker build
前添加:sh 'docker system prune -f'
清理无效镜像
- 在
五、验证部署
- 触发流水线后访问:
http://<SERVER_IP>:8080
- 查看容器状态:
$ docker ps -a | grep my-app
关键提示:首次运行需在Jenkins控制台检查Maven/Docker路径配置(Manage Jenkins → Global Tool Configuration)
通过此流程,代码提交后自动触发构建→镜像打包→部署,实现全链路一键化!