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