docker安裝jenkins使用docker-compose容器化實現部署maven多模塊項目

来源:https://www.cnblogs.com/luckywatergreen/archive/2023/02/20/17136183.html
-Advertisement-
Play Games

準備工作:需要下載好docker,這docker-compose,很簡單,這裡不做介紹。 1、使用docker安裝jenkins鏡像,這裡安裝的最新的jenkins版本,也可指定版本,按需選擇 docker pull jenkins/jenkins:latest 2、查詢jenkins鏡像是否安裝成 ...


準備工作:需要下載好docker,這docker-compose,很簡單,這裡不做介紹。

1、使用docker安裝jenkins鏡像,這裡安裝的最新的jenkins版本,也可指定版本,按需選擇

docker pull jenkins/jenkins:latest

2、查詢jenkins鏡像是否安裝成功

docker images

3、因為是使用jenkins來部署maven項目,所以需要jdk以及maven,因為我本機有下載好的jdk和maven,故直接進行目錄映射即可,運行以下命令啟動jenkins

docker run -u root -d  \
-p 8080:8080 -p 50000:50000 \
-v /home/local/docker/jenkins/jenkins_home:/var/jenkins_home \   -- 映射的jenkins的目錄
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v /usr/local/bin/docker-compose:/usr/local/bin/docker-compose \
-v /usr/bin/docker-compose:/usr/bin/docker-compose \
-v /home/local/java/jdk1.8.0_351:/usr/local/java \
-v /home/local/maven/apache-maven-3.8.1:/usr/local/maven \
--name jenkins --privileged=true  --restart=always jenkins/jenkins

-u : 選擇用戶 root最高許可權

-p : 埠映射,本機埠:容器埠

-v : 目錄掛載

  jenkins_home:映射jenkins的目錄(配置、環境、工作目錄等)

  /var/run/docker.sock 和 /usr/bin/docker: 可以簡單的理解映射這個目錄之後可以在jenkins中直接使用docker命令,具體想詳解參考:https://www.cnblogs.com/zhangmingcheng/p/16420449.html

  docker-compose:在jenkins里使用docker-compose構建

--name : 容器名稱

--privileged=true : 在容器中擁有本機的root許可權

--restart=always : docker重啟時,會自動重啟容器

4、在瀏覽器訪問

本   機:http://localhost:8080/

伺服器(記得在安全組裡開啟8080埠):http://公網ip:8080/ 

第一次訪問會需要輸入用戶名:admin 和密碼,這個密碼jenkins會生成一個初始密碼,通過一下命令查看

# 進入jenkins容器內部
docker exec -it jenkins bash # 查詢初始密碼 cat /var/jenkins_mount/secrets/initialAdminPassword

登錄成功之後,選擇預設安裝插件,等待安裝插件完成,至此jenkins安裝成功

5、jenkins進行全局配置

jdk配置

 

 

maven配置

 

 

5、安裝jenkins的插件

 

 

 

需要選擇多分支構建的需要下載

 

 

 6、新增maven項目

需要選擇不同分支構建填寫,單分支可以跳過這一步

 

 

添加git倉庫,這裡我選擇的gitee,添加你的gitee的賬號密碼或者是憑證

 

 

添加wehook檢測git代碼提交,進行代碼提交自動部署

 

 

 

 

 

 

 在git中新增webhook,填入上一步拿到的url和密碼

 

 

 

回到jenkins中,繼續配置

 

 

 

 

 

 這裡shell命令用於使用docker-compose運行項目

#!bash
current_dir=$(pwd)
echo '當前目錄:'+${current_dir}
imgs_prefix=com.cai.project/    # 鏡像的首碼
imgs={'lucky-gateway-server' 'lucky-security-server'}  # 鏡像名稱,這裡我採用的是服務名稱
containers={'lucky-cloud-lucky-security-server' 'lucky-cloud-lucky-gateway-server'}  # 容器名稱

mvn install -Dmaven.test.skip=true -Dsource.skip    # 清除後打包跳過單元測試
echo '停止並刪除容器'
for container in ${containers}    
do
    
    docker stop `docker ps -a| grep `+${container}+`* | awk '{print $1}' `
    docker rm   `docker ps -a| grep `+${container}+`* | awk '{print $1}' `
done

echo '刪除鏡像'
for img in ${imgs}
do
docker rmi   `docker images -a| grep `+${imgs_prefix}+${img}+` | awk '{print $3}' `
done

docker-compose up -d --build

 

 到此,就配置完成,當然在項目中我們也需要編寫dockerfile和docker-compose.yml文件

# dockerfile 文件,放在模塊的更目錄下
FROM openjdk:8 # 維護者信息 MAINTAINER cai
<1415553710@qq.com> # 指定時區 RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone # 工作目錄 WORKDIR /app/gateway # 掛載目錄 VOLUME /app/gateway/logs # 添加 jar ADD ./target/*.jar gateway.jar # 暴露的埠號 EXPOSE 11001 # docker啟動時,運行的命令,這裡容器啟動時直接運行jar服務。 ENTRYPOINT ["sh", "-c", "exec java -Xloggc:/app/gateway/logs/gc.log -jar gateway.jar"]

 

# docker-compose.yml文件 ,放在項目的根目錄中
version: '3'
services: # services的Id一般跟子項目的artifactId保持一致 lucky-gateway-server: # 創建鏡像,會自動執行當前目錄下xxx文件夾中的Dockerfile文件 build: ./lucky-gateway-server # 鏡像名:標簽名 image: "com.cai.project/lucky-gateway-server:latest" ports: - "11001:11001" volumes: - "/var/jenkins_home/logs/gateway:/app/logs" lucky-security-server: build: ./lucky-security-server image: "com.cai.project/lucky-security-server:latest" ports: - "11002:11002" volumes: - "/var/jenkins_home/logs/security:/app/logs"

 

 然後就可以進行構建測試了,

 

 

 

 

 

 

 

TRANSLATE with x English
Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian  
  TRANSLATE with COPY THE URL BELOW Back EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • leetcode《圖解數據結構》劍指 Offer 34. 二叉樹中和為某一值的路徑(java解題)的解題思路和java代碼,並附上java中常用數據結構的功能函數。 ...
  • 運算符 算術運算符 算數運算符: + - * / // % ** # + var1 = 7 var2 = 90 res = var1 + var2 print(res) # 97 # - var1 = 7 var2 = 90 res = var1 - var2 print(res) # 83 # * ...
  • synchronized 是 Java 語言的一個關鍵字,它允許多個線程同時訪問共用的資源,以避免多線程編程中的競爭條件和死鎖問題。 ...
  • 一 背景 在我們的工作中我們經常有一種場景就是要使用到隊列,特別是對於這樣的一種情況:就是生產的速度明顯快於消費的速度,而且在多線程的環境下消息的生產由多個線程產生消息的消費則沒有這種限制,通過使用隊列這種方式能夠很大程度上將多線程的問題通過入隊的方式變成單個線程內的消息的聚合,然後通過單獨的線程進 ...
  • Dapper 是一個 容易上手,輕量級,靈活高效,開源的 迷你 ORM,由 Stack Overflow 團隊的 Sam Saffron 出品,你可以利用 Dapper 簡化數據訪問並且支持高性能, 還有一點, Dapper 提供了很多非同步方法,本篇我們就來聊一聊如何在 ASP.NET Core 中 ...
  • 架構說明: 由淺入深,我們暫時不考慮分散式,安裝Jenkins到用戶伺服器進行CICD 需要兩台伺服器 Gitlab:192.168.232.128:12080 源代碼倉庫,可以參考《安裝gitlab》 用戶伺服器:192.168.232.130, 通過Jenkins自動構建服務:1、git clo ...
  • 1、功能 1.1、視窗快速“上下分屏” Windows雖名叫“窗子”。 可它預設的“視窗分屏”功能卻簡陋到了異常: 將視窗拖到屏幕的左右邊緣,只能實現最基本的左右二分屏; 屏幕的下邊緣由於被任務欄占據,將視窗拖到這裡不會觸發任何分屏動作,直接浪費一個觸發區; 而“視窗拖到屏幕上邊緣”的動作,已經預設 ...
  • 背景 在 vim 中使用 fzf.vim 插件可以進行方便的搜索文件, 源碼TAG, GIT 記錄等, 最近抽空看了下 BTags 命令在 c, c++ 文件中, 無法顯示頭文件中的函數聲明 標簽問題. 比如在頭文件中有如下一個函數聲明, 使用 BTags 命令是無法顯示出這個函數原型的. /* 函 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...