05-DevOps-Jenkins自動拉取構建代碼

新建Gitlab倉庫

先在Gitab上創建一個代碼倉庫,選擇創建空白項目

安裝說明進行填寫,然后點擊創建項目

創建好的倉庫是空的,什么都沒有

新建一個springboot項目,用于代碼上傳使用。

只是為了測試代碼上傳功能,所以代碼很簡單,寫一個控制器類,然后返回一個字符串。

項目的完整代碼已經打包,下載地址:https://download.csdn.net/download/liangmengbk/90633199

代碼編寫完成,使用Git完成代碼的提交。?

選中項目文件夾,右鍵,選擇Git,然后選擇提交文件夾,如下圖:

把顯示模式改為文件夾顯示

選中src文件夾中的內容和pom.xml文件,點擊提交

到這里為止,把代碼提交到了本地的倉庫中,現在需要把代碼上傳到遠程倉庫(前面已經搭建好的GitLab)

下面開始向遠程倉庫進行代碼的提交

配置遠程倉庫地址

輸入遠程倉庫的地址URL

?

配置好遠程倉庫地址后,點擊push

輸入Gitlab的用戶名和密碼

用戶名:root

密碼:12345678@? (密碼是在創建Gitlab時自己設置的)

等待片刻,idea右下角會顯示已經將代碼提交到遠程倉庫。

打開Gitlab的項目頁面,切換到master分支

就可以看到剛才提交的代碼

到此,完成了Gitlab新倉庫的創建及代碼提交到Gitlab倉庫中。

使用Jenkins完成代碼的自動拉取

在Jenkins中新建一個任務

自己定義一個名稱(不需要與Gitlab完全一致),選擇自由風格。

配置完成,點擊應用,保存。

回到Jenkins首頁,就可以看到剛才創建的任務。

點擊任務名稱,進入到任務中,選擇構建任務

構建過程中,左下角會顯示構建的進度條?

構建完成

點擊這條記錄,選擇控制臺輸出,就能看到具體的執行過程。

驗證下Jenkins是否真正的拉取到了文件,進入Jenkins所在的服務器(192.168.1.10),找到/var/jenkins/workspace目錄,看里面是否有Jenkins創建的工程文件夾(myproject-ci)

進入到工程文件夾里面,看是否有上傳的代碼文件

到此,Jenkins已經成功拉取到了Gitlab倉庫中的代碼文件。

說明:這里為什么能夠在宿主機上(而不是Jenkins容器內部)看到Jenkins工程,是因為前面已經將/var/jenkins 目錄掛載到Jenkins容器內部了。Jenkins操作的實際就是宿主機上文件。

Jenkins就是把原來人工要操作的命令,現在由Jenkins幫助我們自動構建。

在Jenkins中對代碼進行編譯

前面只是把源代碼拉取到了Jenkins工程中,如果要變成產出物,還需要對源代碼進行編譯操作。

在myproject-ci工程中,找到配置

在Build中選擇執行shell

sh /usr/local/maven/bin/mvn package

shell腳本說明,使用maven來執行package命令,將源代碼編譯,自動測試,并打包,形成jar文件,這個過程由maven自動完成。

填寫完成,點擊應用、保存

點擊立即構建

通過查看構建的控制臺,確實構建是否成功。

最后出現SUCCESS表示成功?

出現問題并解決(如果沒有問題,則跳過這個步驟)

在構建的時候,發生了錯誤,無法訪問到阿里云倉庫,報錯信息如下圖:

針對這個問題,排查了一下,大概原因是用macvlan網絡模式導致的。嘗試進行修復,并沒有解決網絡問題。

最后決定不使用macvlan,使用默認的橋接網絡模式。

執行如下腳本,將Gitlab和Jenkins的網絡模式均改為默認網絡模式,不使用macvlan。

0.通過docker ps命令,找到Gitlab和Jenkins的容器ID

1. 停止并刪除當前容器(注意是兩個容器ID放到一行 中間是空格)
docker stop 3e982db0c15f 707d31917085
docker rm 3e982db0c15f 707d31917085

2. 使用bridge網絡模式重新創建GitLab容器
docker run -d --name gitlab \
? --hostname gitlab.example.com \
? --restart=always \
? -p 83:80 -p 443:443 -p 2222:22 \
? -v /etc/gitlab:/etc/gitlab \
? -v /var/log/gitlab:/var/log/gitlab \
? -v /var/opt/gitlab:/var/opt/gitlab \
? gitlab/gitlab-ce

3. 使用bridge網絡模式重新創建Jenkins容器
docker run -d --name jenkins \
? --restart=always \
? -p 8083:8080 -p 50000:50000 \
? -v /var/jenkins/:/var/jenkins_home/ \
? -v /usr/local/jdk:/usr/local/jdk \
? -v /usr/local/maven:/usr/local/maven \
? -e JENKINS_UC=https://mirrors.cloud.tencent.com/jenkins/ \
? -e JENKINS_UC_DOWNLOAD=https://mirrors.cloud.tencent.com/jenkins/ \
??jenkins/jenkins:lts

4. 獲取GitLab容器的IP地址
GITLAB_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' gitlab)

5. 配置Jenkins容器使其能夠訪問GitLab
docker exec -u 0 -it jenkins bash -c "echo '$GITLAB_IP gitlab.example.com gitlab' >> /etc/hosts"

6. 測試連接
# 測試Jenkins容器能否訪問互聯網
docker exec -it jenkins ping -c 4 8.8.8.8

# 測試Jenkins容器能否訪問GitLab
docker exec -it jenkins ping -c 4 gitlab.example.com

7.在Jenkins項目配置中將Git倉庫URL從http://192.168.1.240/root/myproject-ci更改為http://gitlab.example.com/root/myproject-ci

通過以上操作,把原來的容器刪掉,基于原有的docker鏡像,重新創建了新的Gitlab容器和Jenkins容器。

上面的腳本執行完畢后,Gitlab容器和Jenkins容器就沒有自己獨立的ip了(因為不是macvlan模式)。

Gitlab訪問地址:http://192.168.1.10:83/

Jenkins訪問地址:http://192.168.1.10:8083/

用戶名和密碼還是之前的,Gitlab:root/123456@? ??Jenkins:root/root

再次點擊構建,成功拉取到了依賴,完成打包的操作。

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

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

相關文章

C#核心(24)結構體和類的區別,抽象類和接口的區別(面試常問)

前言 隨著上一節我們對StringBulider的講解落下帷幕,c#核心的知識點我們也即將告一段落,我們講完了面向對象要用的三大特性(封裝,繼承,多態)和七大原則。期中自然也不乏一些小的散的碎的的知識點。 今天我們要講的也…

HTMLCSS實現異環網站,期末web作業

本網站是我在學習前端時敲得,僅供學習使用。 這段代碼是一個完整的 HTML 網頁項目,包含 HTML、CSS 和 JavaScript 部分,用于構建一個名為 “異環” 的網頁。網頁具備頭部導航欄、主體視頻展示、圖片交互元素、音樂播放控制、視頻彈窗播放以及…

Oracle表的別名不能用as,列的別名可以用as

在 Oracle 數據庫中,?表的別名?和?列的別名?在使用 AS 關鍵字時確實有不同規則,以下是詳細說明: 1. 表的別名(Table Alias)? ?不支持 AS 關鍵字?,直接跟在表名后即可。?語法示例?: S…

【SAP ME 44】在 HANA DB中報廢SFC時的SHOP_ORDER表記錄鎖定

癥狀 SELECT…FROM SHOP_ORDER FOR UPDATE 在 SFC 報廢期間持有鎖,當同時調用數量較大時,可能會導致 HANA 數據庫出現大量鎖積壓。這有時會導致因等待 HANA 數據庫釋放“選擇更新”鎖而導致報廢 SFC 花費數分鐘。 HANA 數據庫日志中的示例: # begin PreparedStatement_ex…

Vscode開發Vue項目NodeJs啟動報錯處理

文章目錄 背景一、npm啟動報錯報錯信息定位原因處理方案第一步、下載安裝高版本 二、node 無法識別報錯信息處理方案定位原因第一步、檢測環境變量第二步、重新開啟界面 背景 使用Vscode開發Vue項目,使用到NodeJs,記錄出現的問題及處理方案,…

破局遺留系統!AI自動化重構:從靜態方法到Spring Bean注入實戰

在當今快速發展的軟件行業中,許多企業都面臨著 Java 遺留系統的維護和升級難題。這些老舊系統往往采用了大量靜態方法,隨著業務的不斷發展,其局限性日益凸顯。而飛算 JavaAI 作為一款強大的 AI 工具,為 Java 遺留系統的重構提供了全新的解決方案,能夠實現從靜態方法到 Spring B…

2025媽媽杯數學建模C題完整分析論文(共36頁)(含模型建立、可運行代碼、數據)

2025 年第十五屆 MathorCup 數學建模C題完整分析論文 目錄 摘 要 一、問題分析 二、問題重述 三、模型假設 四、 模型建立與求解 4.1問題1 4.1.1問題1思路分析 4.1.2問題1模型建立 4.1.3問題1代碼(僅供參考) 4.1.4問題1求解結果(僅…

【Python爬蟲詳解】第一篇:Python爬蟲入門指南

什么是網絡爬蟲? 網絡爬蟲(Web Crawler)是一種自動獲取網頁內容的程序。它可以訪問網站,抓取頁面內容,并從中提取有價值的數據。在信息爆炸的時代,爬蟲技術可以幫助我們高效地收集、整理和分析互聯網上的海…

【JavaWeb后端開發02】SpringBootWeb + Https協議

課程內容: SpringBootWeb 入門 Http協議 SpringBootWeb案例 分層解耦 文章目錄 1. SpringBootWeb入門1.1 概述1.2 入門程序1.2.1 需求1.2.2 開發步驟1.2.3 常見問題 1.3 入門解析 2. HTTP協議2.1 HTTP概述2.1.1 介紹2.1.2 特點 2.2 HTTP請求協議2.2.1 介紹2.2.2…

MATLAB 控制系統設計與仿真 - 37

范數魯棒控制器的設計 魯棒控制器的設計 根據雙端子狀態方程對象模型結構,控制器設計的目標是找到一個控制器K(s),它能保證閉環系統的范數限制在一個給定的小整數下,即 這時控制器的狀態方程為: 其中X與Y分別為下面兩個代數Riccati方程的解…

依賴沖突,缺失插件導致無法啟動項目 強制安裝命令(npm install --legacy-peer-deps)

小白終成大白 文章目錄 小白終成大白前言總結 前言 運維工程師說搞一個自動化打包流程 在服務器裝了hbuilder 找前端來啟動項目 我沒啟動起來 … 啟動報錯 failed to load config from D:\zhuque-uniapp\vite.config.js 16:17:31.601 error when starting dev server: 16:17:3…

數據戰略新范式:從中臺沉淀到服務覺醒,SQL2API 如何重塑數據價值鏈條?

一、數據中臺退燒:從 “戰略神話” 到 “現實拷問” 曾幾何時,數據中臺被視為企業數字化轉型的 “萬能解藥”,承載著統一數據資產、打破業務壁壘的厚望。然而,大量實踐暴露出其固有缺陷:某零售企業投入 500 萬元建設中…

警惕阿里云中的yum update操作不當導致:/sbin/init被清空導致Linux無法正常啟動

由于使用阿里云進行部署測試,因而會對yum update進行操作,這兩天更新了systemd-239-82.0.3.4.al8.2.x86_64,但存在報錯,然后進行yum history undo和清空yum cache,但出現操作Linux命令行無效。具體來說,幾個…

論文閱讀:2023 ICLR Safe RLHF: Safe Reinforcement Learning from Human Feedback

總目錄 大模型安全相關研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 Safe RLHF: Safe Reinforcement Learning from Human Feedback 安全 RLHF:通過人類反饋進行安全強化學習 https://arxiv.org/pdf/2310.12773 https://github.com/PKU-Alignment/safe…

android rom打包解包工具,Android ROM定制:boot.img、recovery解包打包

安卓boot.img和recovery.img解析與修改指南 安卓映像文件結構解析 大家都知道安卓的核心更換是在boot.img里面,那么如何在Windows下解開它呢?這里介紹一個實用的方法。 首先需要獲取bootimg.exe工具,這個工具最初是為華為設備開發的&#…

cdp-(Chrome DevTools Protocol) browserscan檢測原理逆向分析

https://www.browserscan.net/zh/bot-detection 首先,打開devtools后訪問網址,檢測結果網頁顯示紅色Robot,標簽插入位置,確定斷點位置可以hook該方法,也可以使用插件等方式找到這個位置,本篇不討論. Robot標簽是通過insertBefore插入的. 再往上追棧可以發現一個32長度數組,里面…

PostgreSQL 通過 copy 命令導入幾何數據 及 通過 CopyManager.copyIn() 導入幾何數據

COPY命令介紹 copy是postgresql提供的一個專門用于快速導入導出數據的命令,通常用于從文件(TXT、CSV等)或標準輸入輸出中讀取或寫入數據。適合批量導入導出數據,速度快。 默認情況下,如果在處理過程中遇到錯誤,COPY將失敗。 COPY只能用于表,不能用于視圖!!! COPY…

常用的幾種 Vue 父子組件傳值方式

1. 父組件向子組件傳值(props) 父組件代碼:Parent.vue <template><div><h2>父組件</h2><Child :parent-msg="parentMsg" /></div> </template><script> import Child from ./Child.vue;export default {componen…

【1】云原生,kubernetes 與 Docker 的關系

Kubernetes&#xff1f;K8s&#xff1f; Kubernetes經常被寫作K8s。其中的數字8替代了K和s中的8個字母——這一點倒是方便了發推&#xff0c;也方便了像我這樣懶惰的人。 什么是云原生&#xff1f; 云原生&#xff1a; 它是一種構建和運行應用程序的方法&#xff0c;它包含&am…

Eureka搭建

1.注冊中心server端 1.1.引入依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency><groupId>org.springframework.cloud</…