Jenkins+gitlab+docker+harbor容器化自動部署詳細流程

来源:https://www.cnblogs.com/incognitor/archive/2022/08/19/16603106.html
-Advertisement-
Play Games

本文主要介紹了線程池框架 Executor,ThreadPoolExecutor 的「構造參數」和「工作行為」,線程池的生命周期,Executors 提供的線程池 ...


環境:Linux版本:Centos7

一、更新源:
  yum update

二、安裝docker:
  yum install docker -y

  啟動docker:

  systemctl start docker

三、.安裝gitlab

  1.docker拉取鏡像(社區版)

    docker pull gitlab/gitlab-ce

  2.運行gitlab鏡像:
    docker run -d -p 8443:443 -p 8090:80 -p 8022:22 --name gitlab --restart always -v /home/local/gitlab_docker/gitlab:/etc/gitlab -v /home/local/gitlab_docker/logs:/var/log/gitlab -v /home/local/gitlab_docker/data:/var/opt/gitlab gitlab/gitlab-ce

    參數說明:

    -d:後臺運行

    -p:埠映射,宿主機埠:容器埠

    --name: 給將要運行的容器命名

    --restart always:docker啟動的時候,也自行啟動

    -v:掛載目錄,宿主機目錄:容器目錄

    gitlab/gitlab-ce:要運行的鏡像

  3.修改gitlab.rb配置文件

    vim /home/local/gitlab_docker/gitlab/gitlab.rb


    內容如下:


    ##改成本機ip
    external_url 'http://192.168.42.227'
    gitlab_rails['gitlab_ssh_host'] = '192.168.42.227'

    ##上面映射的埠
    gitlab_rails['gitlab_shell_ssh_port'] = 8022

  4.進入容器重啟配置

    ##進去gitlab容器的命令
    docker exec -it gitlab bash

    ##重置gitlab客戶端的命令
    gitlab-ctl reconfigure 

  

  5.修改http的clone地址加上埠
    ##進入容器內部
    docker exec -it gitlab /bin/bash

    ##修改文件
    vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml

    內容如下:

    ##改成本機ip
    host: 192.168.42.227
    ##clone的埠,上面映射的埠
    port: 8090
    https: false

  

  6.重啟gitlab,在容器內執行:

    gitlab-ctl restart

  註解:如果使用docker restart gitlab,會自動執行gitlab-ctl reconfigure,配置會被還原,我們自己剛剛改的配置會丟失,慎用docker restart gitlab

 

四、安裝Harbor
  1.安裝docker-compose
    下載地址:https://github.com/docker/compose/releases ,選中docker-compose-linux-x86_64下載

  2 下載完成重命名為:docker-compose,並放到 /usr/local/bin/下

  3 賦予可執行許可權:

    sudo chmod +x /usr/local/bin/docker-compose

  4 創建軟連接:

    sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

  5 檢查安裝結果:

    docker-compose --version

  6 下載harbor: https://github.com/goharbor/harbor/releases/download/v2.4.1/harbor-offline-installer-v2.4.1.tgz

    並放到目錄下: /home/local/

  7 解壓文件:

    tar xzvf harbor-offline-installer-v2.4.1.tgz

  8 拷貝配置文件:cp /home/local/harbor/harbor.yml.tmpl /home/local/harbor/harbor.yml

  9 修改http訪問地址,禁用https:

    vi /usr/local/harbor/harbor.yml

    內容如下:

    #本機ip
    hostname: 192.168.42.227
    http:
    port: 8080

    #https 註解https下麵的所屬配置

  10 執行安裝:sudo /home/local/harbor/install.sh

  11 啟動、關閉:在harbor目錄下執行命令:

    啟動:

      docker-compose up -d

    關閉:

      docker-compose down

  12 web(ip:8080)預設賬號密碼:admin     Harbor12345

 

五、為docker設置harbor私服

  1 將harbor私服的http地址配置到docker的不安全的register中,修改配置文件:

    vim /etc/docker/daemon.json,

    追加一行(和上一行用逗號隔開並回車):"insecure-registries": ["192.168.42.227:8080"]

  2 重啟docker:

    systemctl daemon-reload && systemctl restart docker

  3 docker登錄(會顯示登錄成功):

    docker login -u admin -p Harbor12345 http://192.168.42.227:8080

  4 上傳鏡像到私服

    在harbor私服新建一個項目名A,

    按照命名規則創建一個鏡像:

      docker tag 本機鏡像:tag harbor私服地址:埠/項目名A/文件夾:tag

      例如:把本機java鏡像上傳到私服 test_public 目錄下

      docker tag java:8 192.168.42.227:8080/test_public/image_test:v1

  5 上傳到私服:docker push 私服地址/項目名/文件夾:Tags

    登錄:

      docker login -u admin -p Harbor12345 http://192.168.42.227:8080

    上傳:

      docker push 192.168.42.227:8080/test_public/image_test:v1

  6 拉取私服鏡像:docker pull 私服地址/項目名/文件夾:Tags

    docker pull 192.168.42.227:8080/test_public/image_test:v1

 

六、安裝jenkins:

  (建議不要用docker安裝,因為用docker安裝Jenkins寫pipeline腳本時,就用不了宿主機的插件及命令)

  1 依次執行以下命令

    sudo wget -O /etc/yum.repos.d/jenkins.repo \ https://pkg.jenkins.io/redhat/jenkins.repo
    sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
    sudo dnf upgrade
    sudo dnf install java-11-openjdk
    sudo dnf install jenkins

  2 修改jenkins用戶
    vi /etc/sysconfig/jenkins

    JENKINS_USER="jenkins" 改成 JENKINS_USER="root"

  3 配置

    重新載入配置:
      sudo systemctl daemon-reload

    設置開機啟動、關閉(先直接跳過該操作)

      啟動:

        sudo systemctl enable jenkins

      關閉:

        sudo systemctl disable jenkins

  4 啟動

    systemctl start jenkins

    
  5 如果在上一步啟動成功了,可忽略此步。

    如果配置無誤,啟動還是報錯,可以換個啟動方法(本人就是這樣啟動成功的)

    先關閉Jenkins,即使啟動失敗,也不代表是關閉的:

      systemctl stop jenkins

      註:如關閉不成功就重啟Liunx,確認已經關閉了jenkins

    進入目錄:

      cd /etc/init.d/

    啟動:

      ./jenkins start

 

    關閉命令是:./jenkins stop 

  6 web訪問,根據界面提示獲取密碼
    cat /var/lib/jenkins/secrets/initialAdminPassword

  7 安裝社區推薦的插件

  8 等待安裝完成,進入Jenkins主頁

七、配置Jenkins

  1 下載maven:https://maven.apache.org/download.cgi  下載 apache-maven-3.8.6-bin.tar.gz

  2 放到 /home/local 目錄下,併進行解壓

    tar xzvf apache-maven-3.8.6-bin.tar.gz

  3 修改配置源:

    <mirror>
      <id>nexus-aliyun</id>
      <mirrorOf>central</mirrorOf>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>

  4 修改環境變數(追加以下內容):vim /etc/profile

    export PATH=${PATH}:/home/local/apache-maven-3.8.6/bin

  5 重載環境變數

    source /etc/profile

  6 Dashboard -> Manage Jenkins -> Global Tool Configuration

    Maven 配置:將centos中maven目錄拷貝進去

    

 

  

    JDK配置:將centos的JDK目錄拷貝進去,可以通過命令:cat /etc/profile   查看java的目錄

    

 

 

     Git配置:

      先在centos安裝git:

        yum install git -y

      

 

 

 

      Maven配置:

      

 

 

 

    保存,其他插件配置忽略。

 

 八、安裝插件:Git Parameter

  1.Dashboard -> Manage Jenkins -> 插件管理    處輸入Git Parameter進行安裝,安裝完成重啟Jenkins

  該插件用於在Jenkins拉取gitlab代碼時,可以選擇拉取不同分支的代碼

九、配置一個自動部署的項目

  1.新建一個item,輸入項目名稱,選擇中pipeline(流水線,如果沒有該選項,就去安裝該插件,並重啟),點擊確定保存

  

 

 

 

  2 配置《丟棄舊構建》策略:

  

 

 

   

 

 

   3 配置項目參數:新增 String Parameter,用於在構建項目時,可輸入一個字元參數Tag,在寫pipeline script時,可以通過${Tag}來引用

  

  

  4 再新添一個項目參數:Git Parameter(剛剛安裝Git Parameter插件才有該選項),用於在構建時可選擇不同的分支拉取代碼進行構建,在寫pipeline腳本時通過 ${branch} 引用該值。

    註意:分支過濾:.*  是預設值,故${branch}=origin/main ,我改成了:origin.*/(.*)   ${branch}=main,在pipeline腳本里取值 ${branch}拉取代碼就不會報錯了。其他配置預設值

  

 

 

  5 編寫pipeline腳本:

  

 

 

   拉取gitlab代碼的腳本,可以通過點擊《流水線語法》進行自動生產:

  

 

 

     

    無Credentials,點擊添加:輸入gitlab用戶名和密碼,點擊保存即可

    

 

     然後選中該憑證,點擊生成流水線腳本,把腳本拷貝到pipeline腳本里:

    

 

   例如:    

node {
    stage('Preparation') {
      checkout([$class: 'GitSCM', branches: [[name: '*/${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: 'ecf3bed1-f362-4884-b285-fb42ab2d9816', url: 'http://192.168.42.227:8090/root/springboot.git']]])
      echo '拉取代碼成功'
    }
  }

  

 然後,將springboot項目用maven進行打包成jar(跳過了測試),腳本如下:

node {
    stage('Preparation') {
      checkout([$class: 'GitSCM', branches: [[name: '*/${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: 'ecf3bed1-f362-4884-b285-fb42ab2d9816', url: 'http://192.168.42.227:8090/root/springboot.git']]])
      echo '拉取代碼成功'
    }
    stage ('maven build'){
      sh ''' /home/local/apache-maven-3.8.6/bin/mvn clean package -DskipTests '''
      echo '構建成功'
    }
  }

  

  最後將jar打包成鏡像,並上傳到harbor私服的腳本:點擊流水線語法,自動生成harbor憑證腳本:

  

 

   

   輸入如下圖,點擊《添加》

  

 

   輸入賬號密碼,點擊添加:

    

 

 

   

   點擊生成流水線腳本,拷貝腳本:

  

 

 

   

  然後在 //some block 寫自己的腳本,例如:  

 node {

      stage('Preparation') {
        checkout([$class: 'GitSCM', branches: [[name: '*/${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: 'ecf3bed1-f362-4884-b285-fb42ab2d9816', url: 'http://192.168.42.227:8090/root/springboot.git']]])
        echo '拉取代碼成功'
      }
      stage ('maven build'){
        sh ''' /home/local/apache-maven-3.8.6/bin/mvn clean package -DskipTests '''
        echo '構建成功'
      }

      stage ('docker build'){
        withCredentials([usernamePassword(credentialsId: '1a5a43b8-4c27-47f6-95ef-af578568aa3e', passwordVariable: 'password', usernameVariable: 'username')]) {
          sh '''
          REPOSITORY=192.168.42.227:8080/test_public/image_test:${Tag}
          docker build -f Dockerfile -t $REPOSITORY .
          docker login -u ${username} -p ${password} http://192.168.42.227:8080
          docker push $REPOSITORY
          docker images | grep 'image_test'| awk '{print $3}'|xargs docker rmi
          '''
        }
        echo '鏡像上傳成功'
      }
     }

 

說明:

批量刪除REPOSITORY包含”image_test“的鏡像
docker images | grep 'image_test'| awk '{print $3}'|xargs docker rmi

十、部署項目

  1 首次構建的時候,可能不會顯示分支branch,是空的,首次構建拉取代碼成功了,就可以顯示branch了,前提要保證:branch即使是空的,預設值是存在的分支,在git的流水線自動生成pipeline腳本時,配置好預設的分支

 

結束,謝謝!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 遞歸組件 點擊打開視頻講解更加詳細 組件是可以在它們自己的模板中調用自身的。不過它們只能通過 name 選項來做這件事: name: 'unique-name-of-my-component' 當你使用 Vue.component 全局註冊一個組件時,這個全局的 ID 會自動設置為該組件的 name ...
  • Iterator Iterator 概念 Iterator 提供了一種統一的介面機制,為各種不同數據結構提供統一的訪問機制。定義 Iterator 就是提供一個具有 next() 方法的對象,每次調用 next() 都會返回一個結果對象,該結果對象有兩個屬性,value 表示當前的值,done 表示 ...
  • 強制更新($forceUpdate) 點擊打開視頻講解更加詳細 在vue中,如果data中有基本數據類型變數:age,修改他,頁面會自動更新。 但如果data中的變數為數組或對象(引用數據類型),我們直接去給某個對象或數組添加屬性,頁面是識別不到的,不會同步更新; <template> <div i ...
  • Vue中組件通信方式有很多,其中Vue2和Vue3實現起來也會有很多差異;本文將通過選項式API 組合式API以及setup三種不同實現方式全面介紹Vue2和Vue3的組件通信方式。其中將要實現的通信方式如下表所示 | 方式 | Vue2 | Vue3 | | | | | | 父傳子 | props ...
  • 在『伺服器部署 Vue 和 Django 項目的全記錄』一文中,介紹了在伺服器中使用 Nginx 部署前後端項目的過程。然而,當 Web 應用流量增多時,需要考慮負載均衡、流量分發、容災等情況,原生的部署方式通常難以滿足需求。此時,引入 Docker 部署多節點,能夠在單台高性能伺服器或伺服器集群中... ...
  • MybatisPlus代碼生成器 這裡講解的是新版 (mybatis-plus 3.5.1+版本),舊版不相容 官方文檔:https://baomidou.com/(建議多看看官方文檔,每種功能裡面都有講解) 配置 這裡的配置表格和官方文檔一致 數據源配置(DataSource) | 屬性 | 說明 ...
  • 目錄 一.簡介二.效果演示三.源碼下載四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 Open ...
  • 1. 什麼是編程語言 編程語言,其實就是一種人和電腦進行溝通所需要的介質、工具。就像英語是中國人用來與外國人溝通的工具。 2.什麼是編程 編程指的是:人類通過編程語言,把想要電腦做的事,寫到文件中,編程的結果就是這一堆文件,這些文件就是程式。 3. 為什麼要編程 電腦就像是奴隸,人類通過編程去 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...