Jenkins+Docker+Harbor快速部署Spring Boot项目详解
Jenkins+Docker+Harbor快速部署Spring Boot项目详解
Jenkins、Docker和Harbor是现代DevOps流程中的核心工具,结合使用可以实现自动化构建、测试和部署。下面我将详细介绍如何搭建这个集成环境。
一、各工具的核心作用
-
Jenkins
- 自动化CI/CD工具,负责拉取代码、编译、测试、构建Docker镜像并部署
- 提供可视化界面管理Pipeline
-
Docker
- 容器化平台,将应用及其依赖打包成独立容器
- 确保环境一致性,提高部署效率
-
Harbor
- 企业级Docker镜像仓库,存储和管理Docker镜像
- 支持权限控制、镜像复制、安全扫描等功能
二、环境准备
-
服务器规划
- Jenkins服务器:2核4G+,用于运行Jenkins服务
- Harbor服务器:4核8G+,用于存储Docker镜像
- 应用服务器:根据项目需求配置,运行Docker容器
-
软件安装
- 在所有服务器安装Docker:
curl -fsSL https://get.docker.com | bash systemctl enable docker && systemctl start docker
- 在Jenkins服务器安装Docker Compose:
curl -L "https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
- 在所有服务器安装Docker:
三、Harbor安装与配置
-
下载并解压Harbor
wget https://github.com/goharbor/harbor/releases/download/v2.8.3/harbor-offline-installer-v2.8.3.tgz tar xvf harbor-offline-installer-v2.8.3.tgz -C /opt/ cd /opt/harbor
-
配置Harbor
cp harbor.yml.tmpl harbor.yml vi harbor.yml
修改以下关键配置:
hostname: harbor.example.com # 修改为你的域名或IP http:port: 80 harbor_admin_password: Harbor12345 # 管理员密码 data_volume: /data/harbor # 数据存储路径
-
生成证书(可选,推荐使用HTTPS)
mkdir -p /data/cert openssl req -newkey rsa:4096 -nodes -sha256 -keyout /data/cert/harbor.key -x509 -days 365 -out /data/cert/harbor.crt
更新
harbor.yml
启用HTTPS:https:port: 443certificate: /data/cert/harbor.crtprivate_key: /data/cert/harbor.key
-
安装Harbor
./install.sh
-
验证Harbor
- 访问
http://harbor.example.com
- 使用
admin/Harbor12345
登录
- 访问
四、Jenkins安装与配置
-
使用Docker安装Jenkins
mkdir -p /data/jenkins_home chown -R 1000:1000 /data/jenkins_home # Jenkins用户UID为1000docker run -d \--name jenkins \-p 8080:8080 \-p 50000:50000 \-v /data/jenkins_home:/var/jenkins_home \-v /var/run/docker.sock:/var/run/docker.sock \-v $(which docker):/usr/bin/docker \jenkins/jenkins:lts
-
初始化Jenkins
- 访问
http://jenkins-server:8080
- 获取初始密码:
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
- 安装推荐插件,创建管理员账号
- 访问
-
安装必要插件
- Docker Pipeline
- Pipeline
- Git
- Credentials Plugin
五、Jenkins与Harbor集成
-
在Jenkins中添加Harbor凭证
- 进入Jenkins → 凭据 → 系统 → 全局凭据
- 添加用户名密码凭证,用户名和密码为Harbor的账号密码
-
配置Docker Host
- 进入Jenkins → 管理Jenkins → 系统设置 → Docker
- 添加Docker Host:
unix:///var/run/docker.sock
六、Spring Boot项目配置
-
添加Dockerfile
在Spring Boot项目根目录下创建Dockerfile
:FROM openjdk:17-jdk-slim VOLUME /tmp ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-jar","/app.jar"]
-
添加Jenkinsfile
在项目根目录添加Jenkinsfile
:pipeline {agent anyenvironment {DOCKER_IMAGE = "harbor.example.com/devops/spring-boot-demo"DOCKER_TAG = "${env.BUILD_NUMBER}"HARBOR_CREDS = credentials('harbor-credentials')}stages {stage('Build') {steps {sh 'mvn clean package -DskipTests'}}stage('Build Docker Image') {steps {sh "docker build -t $DOCKER_IMAGE:$DOCKER_TAG ."}}stage('Push to Harbor') {steps {sh "docker login -u $HARBOR_CREDS_USR -p $HARBOR_CREDS_PSW harbor.example.com"sh "docker push $DOCKER_IMAGE:$DOCKER_TAG"sh "docker tag $DOCKER_IMAGE:$DOCKER_TAG $DOCKER_IMAGE:latest"sh "docker push $DOCKER_IMAGE:latest"}}stage('Deploy') {steps {sh """ssh user@deploy-server << EOFdocker login -u $HARBOR_CREDS_USR -p $HARBOR_CREDS_PSW harbor.example.comdocker stop spring-boot-demo || truedocker rm spring-boot-demo || truedocker run -d --name spring-boot-demo -p 8080:8080 $DOCKER_IMAGE:$DOCKER_TAGEOF"""}}} }
七、Jenkins Pipeline配置
-
创建新Pipeline项目
- 进入Jenkins → 新建任务 → 输入名称 → 选择Pipeline → 确定
-
配置Pipeline
- 进入项目配置 → Pipeline部分
- 定义方式选择"Pipeline script from SCM"
- SCM选择Git,填写项目Git仓库地址
- 指定
Jenkinsfile
路径
八、关键配置说明
-
Harbor关键配置
harbor.yml
中的hostname
必须正确配置- 生产环境建议启用HTTPS
- 可配置磁盘配额和垃圾回收策略
-
Jenkins关键配置
- 确保Jenkins用户有访问Docker的权限
- 正确配置Harbor凭证
- 确保Jenkins服务器可以SSH到部署服务器
-
Jenkinsfile关键参数
DOCKER_IMAGE
:镜像名称,格式为Harbor地址/项目名/镜像名
DOCKER_TAG
:建议使用构建号或Git提交哈希HARBOR_CREDS
:Harbor凭证ID
九、优化建议
-
添加测试阶段
在Build
阶段后添加测试步骤:stage('Test') {steps {sh 'mvn test'}post {always {junit 'target/surefire-reports/*.xml'}} }
-
使用Docker Compose部署
创建docker-compose.yml
并使用它部署:version: '3' services:spring-boot-demo:image: harbor.example.com/devops/spring-boot-demo:${BUILD_NUMBER}ports:- "8080:8080"environment:- SPRING_PROFILES_ACTIVE=prod
-
添加质量检测
集成SonarQube进行代码质量检测:stage('Code Quality') {steps {sh 'mvn sonar:sonar'} }
十、故障排除
-
Docker连接问题
- 确保Jenkins容器可以访问宿主机的Docker daemon
- 检查
/var/run/docker.sock
权限
-
Harbor认证失败
- 检查Harbor凭证配置是否正确
- 确保Harbor服务器可以访问
- 如果使用HTTPS,确保证书已正确配置
-
部署失败
- 检查部署服务器SSH配置
- 确保部署服务器可以访问Harbor
- 检查容器运行日志:
docker logs spring-boot-demo