Jenkins+Docker+Harbor快速部署Spring Boot項目詳解

Jenkins+Docker+Harbor快速部署Spring Boot項目詳解

Jenkins、Docker和Harbor是現代DevOps流程中的核心工具,結合使用可以實現自動化構建、測試和部署。下面我將詳細介紹如何搭建這個集成環境。

一、各工具的核心作用

  1. Jenkins

    • 自動化CI/CD工具,負責拉取代碼、編譯、測試、構建Docker鏡像并部署
    • 提供可視化界面管理Pipeline
  2. Docker

    • 容器化平臺,將應用及其依賴打包成獨立容器
    • 確保環境一致性,提高部署效率
  3. Harbor

    • 企業級Docker鏡像倉庫,存儲和管理Docker鏡像
    • 支持權限控制、鏡像復制、安全掃描等功能

二、環境準備

  1. 服務器規劃

    • Jenkins服務器:2核4G+,用于運行Jenkins服務
    • Harbor服務器:4核8G+,用于存儲Docker鏡像
    • 應用服務器:根據項目需求配置,運行Docker容器
  2. 軟件安裝

    • 在所有服務器安裝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
      

三、Harbor安裝與配置

  1. 下載并解壓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
    
  2. 配置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  # 數據存儲路徑
    
  3. 生成證書(可選,推薦使用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
    
  4. 安裝Harbor

    ./install.sh
    
  5. 驗證Harbor

    • 訪問http://harbor.example.com
    • 使用admin/Harbor12345登錄

四、Jenkins安裝與配置

  1. 使用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
    
  2. 初始化Jenkins

    • 訪問http://jenkins-server:8080
    • 獲取初始密碼:
      docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
      
    • 安裝推薦插件,創建管理員賬號
  3. 安裝必要插件

    • Docker Pipeline
    • Pipeline
    • Git
    • Credentials Plugin

五、Jenkins與Harbor集成

  1. 在Jenkins中添加Harbor憑證

    • 進入Jenkins → 憑據 → 系統 → 全局憑據
    • 添加用戶名密碼憑證,用戶名和密碼為Harbor的賬號密碼
  2. 配置Docker Host

    • 進入Jenkins → 管理Jenkins → 系統設置 → Docker
    • 添加Docker Host:unix:///var/run/docker.sock

六、Spring Boot項目配置

  1. 添加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"]
    
  2. 添加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配置

  1. 創建新Pipeline項目

    • 進入Jenkins → 新建任務 → 輸入名稱 → 選擇Pipeline → 確定
  2. 配置Pipeline

    • 進入項目配置 → Pipeline部分
    • 定義方式選擇"Pipeline script from SCM"
    • SCM選擇Git,填寫項目Git倉庫地址
    • 指定Jenkinsfile路徑

八、關鍵配置說明

  1. Harbor關鍵配置

    • harbor.yml中的hostname必須正確配置
    • 生產環境建議啟用HTTPS
    • 可配置磁盤配額和垃圾回收策略
  2. Jenkins關鍵配置

    • 確保Jenkins用戶有訪問Docker的權限
    • 正確配置Harbor憑證
    • 確保Jenkins服務器可以SSH到部署服務器
  3. Jenkinsfile關鍵參數

    • DOCKER_IMAGE:鏡像名稱,格式為Harbor地址/項目名/鏡像名
    • DOCKER_TAG:建議使用構建號或Git提交哈希
    • HARBOR_CREDS:Harbor憑證ID

九、優化建議

  1. 添加測試階段
    Build階段后添加測試步驟:

    stage('Test') {steps {sh 'mvn test'}post {always {junit 'target/surefire-reports/*.xml'}}
    }
    
  2. 使用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
    
  3. 添加質量檢測
    集成SonarQube進行代碼質量檢測:

    stage('Code Quality') {steps {sh 'mvn sonar:sonar'}
    }
    

十、故障排除

  1. Docker連接問題

    • 確保Jenkins容器可以訪問宿主機的Docker daemon
    • 檢查/var/run/docker.sock權限
  2. Harbor認證失敗

    • 檢查Harbor憑證配置是否正確
    • 確保Harbor服務器可以訪問
    • 如果使用HTTPS,確保證書已正確配置
  3. 部署失敗

    • 檢查部署服務器SSH配置
    • 確保部署服務器可以訪問Harbor
    • 檢查容器運行日志:docker logs spring-boot-demo

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/81427.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/81427.shtml
英文地址,請注明出處:http://en.pswp.cn/web/81427.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第12次04 :首頁展示用戶名

登錄后&#xff0c;跳轉到首頁&#xff0c;首頁會展示用戶名&#xff1b;未登錄時&#xff0c;首頁將展示登錄與注冊的選項。 第一步&#xff1a;index.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml…

Flask 路由跳轉機制:url_for生成動態URL、redirect頁面重定向

在 Flask 開發中&#xff0c;url_for() 與 redirect() 是實現路由跳轉邏輯的核心工具。 url_for()負責安全、靈活地生成 URL。 redirect()負責發起重定向響應。 1、url_for()&#xff1a;生成URL url_for(endpoint, **values) 是 Flask 提供的 URL 構造工具&#xff0c;可根據…

華為OD機試真題——構成正方形的數量(2025B卷:100分)Java/python/JavaScript/C++/C/GO六種最佳實現

2025 B卷 100分 題型 本文涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、測試用例以及綜合分析; 并提供Java、python、JavaScript、C++、C語言、GO六種語言的最佳實現方式! 本文收錄于專欄:《2025華為OD真題目錄+全流程解析/備考攻略/經驗分享》 華為OD機試真題《構成…

FFMPEG-AAC編碼

一、流程圖 二、代碼解釋 avcodec_find_encoder: 根據指定的AVCodecID查找注冊的編碼器。avcodec_alloc_context3: 為AVCodecContext分配內存。()avcodec_open2: 打開編碼器。avcodec_send_frame: 將AVFrame?壓縮數據給編碼器。avcodec_receive_packet: 獲取到編碼后的…

RPC 協議詳解、案例分析與應用場景

一、RPC 協議原理詳解 RPC 協議的核心目標是讓開發者像調用本地函數一樣調用遠程服務&#xff0c;其實現過程涉及多個關鍵組件與流程。 &#xff08;一&#xff09;核心組件 客戶端&#xff08;Client&#xff09;&#xff1a;發起遠程過程調用的一方&#xff0c;它并不關心調…

Docker基礎 -- Ubuntu 22.04 AArch64 交叉編譯 Docker 鏡像構建指南

Ubuntu 22.04 AArch64 交叉編譯 Docker 鏡像構建指南 作者&#xff1a; &#xff08;填寫作者&#xff09; 發布日期&#xff1a; 2025?05?26 1 背景與目標 在企業內網&#xff08;需要代理&#xff09;環境下&#xff0c;我們需要一套可靠、可復用的 Ubuntu 22.04 交叉編…

【ISP算法精粹】ISP算法管線的預處理算法有哪些?

1. ISP預處理算法有哪些&#xff1f; 在圖像信號處理&#xff08;ISP&#xff09;流程中&#xff0c;預處理階段主要針對圖像傳感器&#xff08;如CMOS/CCD&#xff09;輸出的原始圖像數據&#xff08;通常為拜耳格式的RAW圖像&#xff09;進行初步處理&#xff0c;以校正硬件…

華為OD機試真題——字符串加密 (2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳實現

2025 B卷 100分 題型 本專欄內全部題目均提供Java、python、JavaScript、C、C++、GO六種語言的最佳實現方式; 并且每種語言均涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、3個測試用例以及綜合分析; 本文收錄于專欄:《2025華為OD真題目錄+全流程解析+備考攻略+經驗分…

視頻存儲開源方案

項目成熟度 GitHub - ceph/ceph: Ceph is a distributed object, block, and file storage platform GitHub - minio/minio: MinIO is a high-performance, S3 compatible object store, open sourced under GNU AGPLv3 license. GitHub - seaweedfs/seaweedfs: SeaweedFS i…

典型城市工況數據(Drive Cycle)用于車輛仿真

典型城市工況數據&#xff08;Drive Cycle&#xff09;用于車輛仿真 在車輛仿真過程中&#xff0c;使用典型的城市工況數據&#xff08;Drive Cycle&#xff09;是評估車輛性能、能耗和排放的關鍵步驟。以下是一些常用的典型城市工況數據及其來源&#xff0c;這些數據可以幫助…

深度解析新能源汽車結構與工作原理

一、核心系統架構 新能源汽車主要由三大核心系統構成&#xff1a; 電力驅動系統&#xff1a;包含永磁同步電機、電機控制器&#xff08;MCU&#xff09;及減速器&#xff0c;采用三合一集成設計實現輕量化。永磁同步電機通過電磁感應原理將電能轉化為機械能&#xff0c;其效率可…

跳板問題(貪心算法+細節思考)

首先直接看題&#xff1a; 這題直接貪心其實問題不大&#xff1a; 下面先展示我的一個錯誤代碼&#xff1a; # include<iostream> # include<vector> # include<algorithm>using namespace std;int main() {int N,M;cin>>N>>M;vector<vecto…

pgsql 一些用法

要查詢PostgreSQL數據庫中剩余的磁盤空間&#xff0c;可以使用以下方法&#xff1a; 使用SQL查詢函數&#xff1a; 可以通過pg_size_pretty函數來查看數據庫的總磁盤使用情況&#xff0c;例如&#xff1a; SELECT pg_size_pretty(pg_database_size(‘your_database_name’)); …

【三維重建】【3DGS系列】【深度學習】3DGS的理論基礎知識之如何形成高斯橢球

【三維重建】【3DGS系列】【深度學習】3DGS的理論基礎知識之如何形成高斯橢球 文章目錄 【三維重建】【3DGS系列】【深度學習】3DGS的理論基礎知識之如何形成高斯橢球前言高斯函數一維高斯多維高斯 橢球基本定義一般二次形式 3D高斯橢球3D高斯與橢球的關系各向同性(Isotropic)和…

unix的定時任務和quartz和spring schedule的cron表達式區別

一、核心區別對比表 對比項Unix CrontabQuartzSpring Scheduled表達式位數5 位6 位或 7 位6 位秒級支持? 不支持&#xff08;最小單位是分鐘&#xff09;? 支持? 支持年字段? 無? 可選第7位? 不支持特殊符號支持較少&#xff08;如 *, ,, -, /&#xff09;很豐富和 Quar…

C++基礎算法————遞推

C++遞推:初學者的進階之旅 一、引言 在計算機編程的世界里,C++ 以其強大的功能和高效性受到眾多開發者的青睞。遞推作為一種重要的編程思想,在解決各種復雜問題時發揮著關鍵作用。對于初學者來說,理解并掌握遞推不僅可以提升編程能力,還能培養邏輯思維和問題解決能力。本…

QTabWidget垂直TabBar的圖標和文本水平顯示

一般情況下,我們可以通過QTabWidget的setTabPosition方法來設置TabBar的位置,比如設置在左邊 ui->tabWidget->setTabPosition(QTabWidget::West); 但是此時圖標和文字都是垂直的,如果讓它們水平顯示呢? 一.效果 二.原理 在繪制TabBar時,順時針旋轉90度 三.實現 …

HCIP-AI培養計劃,成為新時代AI解決方案架構高級工程師

01 華為認證是什么&#xff1f; 華為認證&#xff08;Huawei Certification&#xff09;是面向數字化時代構建的ICT人才培訓與認證體系。 當前超過68萬來自全球180多個國家和地區的各行業精英已經取得華為認證&#xff0c;如今全球每年超過10萬名學員通過考試獲得華為認證。 華…

【RabbitMQ】基于Spring Boot + RabbitMQ 完成應用通信

文章目錄 需求描述創建項目訂單系統(生產者)完善配置聲明隊列下單接口啟動服務 物流系統(消費者)完善配置監聽隊列啟動服務 格式化發送消息對象SimpleMessageConverter定義一個對象生產者代碼消費者運行程序 JSON定義一個對象生產者代碼定義轉換器消費者代碼運行程序 需求描述 …

OpenGL Chan視頻學習-7 Writing a Shader inOpenGL

bilibili視頻鏈接&#xff1a; 【最好的OpenGL教程之一】https://www.bilibili.com/video/BV1MJ411u7Bc?p5&vd_source44b77bde056381262ee55e448b9b1973 函數網站&#xff1a; docs.gl 說明&#xff1a; 1.之后就不再整理具體函數了&#xff0c;網站直接翻譯會更直觀也會…