Windows系統Jenkins企業級實戰

目標

在Windows操作系統上使用Jenkins完成代碼的自動拉取、編譯、打包、發布工作。

實施

1.安裝Java開發工具包(JDK)

Jenkins是基于Java的應用程序,因此需要先安裝JDK。可以從Oracle官網或OpenJDK下載適合的JDK版本。推薦java17版本,因為Jenkins依賴高版本的jdk。

安裝包下載地址:

Java Downloads | Oracle 中國

2.下載并安裝Jenkins

訪問Jenkins官方網站,下載最新的Windows安裝包。運行安裝程序,按照提示完成安裝。

安裝包下載地址:

Jenkins 的安裝和設置

安裝教程(文章內容比較多,看安裝部分的內容):

Windows下Jenkins軟件安裝說明及配置_windows jenkins配置文件在哪里-CSDN博客

3.訪問Jenkins

訪問地址:服務器ip+配置的端口(安裝過程中自己配置的端口號)

4.配置Jenkins

配置maven,用于程序打包

配置jdk,Jenkins依賴jdk運行(版本不能太低,最好是jdk17)

配置maven安裝路徑

基礎配置完成。

5新建任務

創建maven項目

保存后,自動跳轉到配置頁面。

選擇參數化構建,本地使用的是SVN源碼管理工具,用branch分支作為參數,選擇List XXX

配置參數化數據源(branch列表)

配置svn賬號

配置svn用戶名和密碼?

排序規則選擇

配置代碼來源?

test 所在位置如下圖所示,用來在打包時動態替換配置文件的,比如測試環境需要測試的配置文件,開發環境需要開發的配置文件,那么在發布測試版本時,就用如下的配置方式來激活測試配置文件。?在文章末尾,有完整的pom文件內容,供參考。

maven打包完成后,把war包放到Tomcat對應的webapps目錄中,完成項目部署,這個步驟用腳本實現。

編寫腳本,完成部署

腳本的內容根據實際需要進行編寫,需要做什么操作,就寫對應操作的shell腳本。

以上配置完成,進行項目構建。

6.構建項目

找打前面已經創建的任務,點擊參數化構建

此時就可以看到所有的branch版本,選擇需要的版本,然后點擊構建。?

剩下的就是等著就可以了,等待構建完畢,整個部署動作就完成了。

點擊對應的構建編號,可以看具體執行過程。

當看到success,表示構建完成。?

通過以上步驟,可以在Windows平臺上成功搭建并配置Jenkins,實現自動化構建和部署。

問題及其處理方案:

1.本地包的引用

Jenkins構建時,出現如下報錯:

包缺失問題,這些是本地jar包(jar包文件放在項目的lib目錄中,項目結構如下圖),不是從maven倉庫拉取。解決方法是在pom文件中加載本地文件。

修改pom.xml,把缺失的包都引用上。?

<dependency><groupId>com.sheca</groupId><artifactId>words</artifactId><version>1.6</version><scope>system</scope><systemPath>${project.basedir}/web/WEB-INF/lib/aspose-words-15.8.0-jdk16.jar</systemPath>
</dependency>

?${project.basedir} 表示項目的根目錄。

2.版本沖突

Jenkins構建時,報錯:程序包javax.xml.bind.annotation不存在

AI給出的錯誤原因:這些錯誤表明你的項目在編譯時找不到?javax.xml.bind?包中的類。這通常是因為在 Java 9 及更高版本中,javax.xml.bind(JAXB)不再是 Java SE 的一部分,需要手動添加依賴。

因為Jenkins配置的jdk版本為jdk17。maven打包時,當前java項目依賴的jdk版本為jdk8,兩個版本會沖突,解決方法:

修改pom.xml文件,在進行maven打包時,使用jdk8:

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>1.8</source><target>1.8</target><fork>true</fork><executable>C:\Program Files\Java\jdk1.8.0_191\bin\javac</executable>  <!-- 指定JDK路徑--></configuration>
</plugin>

3.權限問題

Jenkins構建時,出現如下報錯:

解決方法:Jenkins服務配置為管理員賬號運行

在服務中找到Jenkins,然后找到‘登錄’,選擇‘此賬號’,點擊瀏覽,輸入administrator,自動會加載管理員賬號,然后輸入密碼,點擊確定。

重啟一下Jenkins服務。

4.開發和測試環境配置文件不同的問題

情況一:整個文件替換

在打包時,利用maven的profiles配置,可以做到動態引用配置文件,假如當前需要在打包時,動態引用測試配置文件,具體操作如下:

a.先在系統的resources/test目錄中,把測試配置文件放進去。如下圖:

項目中放置兩份配置文件,pom.xml中添加如下配置:

? <!--Jenkins打測試war包時使用測試的配置文件-->
? ? <profiles>
? ? ? ?<profile>
? ? ? ? ? ?<id>test</id>
? ? ? ? ? ?<build>
? ? ? ? ? ? ? ?<resources>
? ? ? ? ? ? ? ? ? ?<resource>
? ? ? ? ? ? ? ? ? ? ? ?<directory>resources/test</directory>
? ? ? ? ? ? ? ? ? ? ? ?<filtering>true</filtering> ?<!-- 關鍵配置 -->
? ? ? ? ? ? ? ? ? ? ? ?<includes>
? ? ? ? ? ? ? ? ? ? ? ? ? ?<include>properties.config</include>
? ? ? ? ? ? ? ? ? ? ? ? ? ?<include>log4j2.xml</include>
? ? ? ? ? ? ? ? ? ? ? ? ? ?<include>quartz_jobs.xml</include>
? ? ? ? ? ? ? ? ? ? ? ?</includes>
? ? ? ? ? ? ? ? ? ?</resource>
? ? ? ? ? ? ? ?</resources>
? ? ? ? ? ?</build>
? ? ? ?</profile>
? ?</profiles>

Jenkins的任務配置中,在執行打包命令時,激活上面ID為test的配置,如下圖:

-Ptest 表示激活pom.xml中ID=test的配置。

情況二:文件中局部內容替換

如果只是想在打包時,替換文件中的部分內容,比如數據庫鏈接。

在pom.xml文件中引入專門替換字符串的打包插件replacer,完整配置如下:

<!-- jenkins 在maven打包時 動態替換數據庫連接 -->
<plugin><groupId>com.google.code.maven-replacer-plugin</groupId><artifactId>replacer</artifactId><version>1.5.0</version><executions><execution><phase>prepare-package</phase><goals><goal>replace</goal></goals></execution></executions><configuration><file>resources/data.config</file><replacements><replacement><token>aaa</token><value>bbb</value></replacement></replacements></configuration>
</plugin>

上面的這段配置,表示將resources/data.config文件中的字符串aaa,在打包時,替換為字符串bbb。

通過以上兩種方式,可以做到動態替換不同環境的配置。

5.pom.xml文件示例

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>groupId</groupId><artifactId>MBXM</artifactId><version>1.2-RELEASE</version><packaging>war</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><skipTests>true</skipTests><tomcat.version>8.5.75</tomcat.version><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><log4j2.version>2.17.1</log4j2.version></properties><dependencies><dependency><groupId>org.apache.xmlbeans</groupId><artifactId>xmlbeans</artifactId><version>3.0.0</version></dependency><!--本地包--><dependency><groupId>com.sheca</groupId><artifactId>pdf</artifactId><version>1.6</version><scope>system</scope><systemPath>${project.basedir}/web/WEB-INF/lib/aspose.pdf-17.3.0.jar</systemPath></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>${java.version}</source><target>${java.version}</target><fork>true</fork><executable>C:\Program Files\Java\jdk1.8.0_191\bin\javac</executable>  <!-- 指定JDK路徑--></configuration></plugin><!-- war包的信息--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.3.1</version><configuration><warName>ZJZF</warName><webXml>web/WEB-INF/web.xml</webXml><!--<packagingExcludes>web/WEB-INF/web.xml,WEB-INF/lib/javax.servlet-api-3.1.0.jar</packagingExcludes>--><warSourceDirectory>web</warSourceDirectory></configuration></plugin><!-- jenkins 在maven打包時 動態替換數據庫連接 --><plugin><groupId>com.google.code.maven-replacer-plugin</groupId><artifactId>replacer</artifactId><version>1.5.0</version><executions><execution><phase>prepare-package</phase><goals><goal>replace</goal></goals></execution></executions><configuration><file>resources/Inter.HTTPHandler.Core.URLMapSetting.config</file><replacements><replacement><token>Data Source=jdbc:oracle:thin:@123/orcl;User ID=a;Password=a;</token><value>Data Source=jdbc:oracle:thin:@456/orcl;User ID=b;Password=b;</value></replacement></replacements></configuration></plugin></plugins><sourceDirectory>src</sourceDirectory><resources><resource><directory>resources</directory><filtering>false</filtering><excludes><exclude>test/**</exclude>  <!-- 排除測試配置 --></excludes></resource></resources><testResources><testResource><directory>src/Test</directory></testResource></testResources></build><!--Jenkins打測試war包時使用測試的配置文件--><profiles><profile><id>test</id><build><resources><resource><directory>resources/test</directory><filtering>true</filtering>  <!-- 關鍵配置 --><includes><include>properties.config</include><include>log4j2.xml</include><include>quartz_jobs.xml</include></includes></resource></resources></build></profile></profiles></project>

項目整體文件解構,如下圖:

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

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

相關文章

MySQL 索引和事務

目錄 一、MySQL 索引介紹 1、索引概述 2、索引作用 3、索引的分類 &#xff08;1&#xff09;普通索引 &#xff08;2&#xff09;唯一索引 &#xff08;3&#xff09;主鍵索引 &#xff08;4&#xff09;組合索引&#xff08;最左前綴&#xff09; &#xff08;5&…

Block Styler——字符串控件

字符串控件的應用 參考官方幫助案例&#xff1a;&#xff08;這個方式感覺更好&#xff0c;第二種方式也可以&#xff09;E:\NX1980\UGOPEN\SampleNXOpenApplications\C\BlockStyler\ColoredBlock 普通格式&#xff1a; 讀取&#xff1a; //方法一 string0->GetProperti…

P2572 [SCOI2010] 序列操作 Solution

Description 給定 01 01 01 序列 a ( a 1 , a 2 , ? , a n ) a(a_1,a_2,\cdots,a_n) a(a1?,a2?,?,an?)&#xff0c;并定義 f ( l , r ) [ ( ∑ i l r a i ) r ? l 1 ] f(l,r)[(\sum\limits_{il}^r a_i)r-l1] f(l,r)[(il∑r?ai?)r?l1]. 執行 m m m 個操作&am…

RAG 2.0 深入解讀

作者&#xff1a;阿里云開發者 原文&#xff1a;https://zhuanlan.zhihu.com/p/1903437079603545114? 一、Introduction 過去一年可謂是RAG元年&#xff0c;檢索增強生成技術迅速發展與深刻變革&#xff0c;其創新與應用已深刻重塑了大模型落地的技術范式。站在2025年&#x…

代碼隨想錄第41天:圖論2(島嶼系列)

一、島嶼數量&#xff08;Kamacoder 99&#xff09; 深度優先搜索&#xff1a; # 定義四個方向&#xff1a;右、下、左、上&#xff0c;用于 DFS 中四向遍歷 direction [[0, 1], [1, 0], [0, -1], [-1, 0]]def dfs(grid, visited, x, y):"""對一塊陸地進行深度…

基于CNN的貓狗圖像分類系統

一、系統概述 本系統是基于PyTorch框架構建的智能圖像分類系統&#xff0c;專門針對CIFAR-10數據集中的貓&#xff08;類別3&#xff09;和狗&#xff08;類別5&#xff09;進行分類任務。系統采用卷積神經網絡&#xff08;CNN&#xff09;作為核心算法&#xff0c;結合圖形用…

linux搭建hadoop學習

linux搭建hadoop學習 下載安裝包: 海外資源可能需要翻墻或者找國內資源 cd /opt wget https://dlcdn.apache.org/hadoop/common/hadoop-2.10.2/hadoop-2.10.2.tar.gz tar -zxvf hadoop-2.10.2.tar.gz mv hadoop-2.10.2 hadoop配置環境變量 # 在/etc/profile文件中添加下面內…

Kubernetes生產實戰(十六):集群安全加固全攻略

Kubernetes集群安全加固全攻略&#xff1a;生產環境必備的12個關鍵策略 在容器化時代&#xff0c;Kubernetes已成為企業應用部署的核心基礎設施。但根據CNCF 2023年云原生安全報告顯示&#xff0c;75%的安全事件源于K8s配置錯誤。本文將基于生產環境實踐&#xff0c;系統講解集…

類加載機制詳解:雙親委派模型與打破它的方式

在復雜的 Java 系統中&#xff0c;類加載是最基礎卻常被忽略的一環。理解 JVM 的類加載機制&#xff0c;特別是 雙親委派模型&#xff08;Parent Delegation Model&#xff09;&#xff0c;是我們深入掌握熱部署、插件機制、ClassLoader 隔離、ClassNotFound 錯誤等問題的關鍵。…

Android SDK 開發中的 AAR 與 JAR 區別詳解

在 Android SDK 開發中&#xff0c;構建項目時我們常常會看到生成兩個不同的文件&#xff1a;一個是 build/outputs/aar/*.aar&#xff0c;另一個是 build/intermediates/aar_main_jar/debug/syncDebugLibJars/classes.jar。很多初學者會疑惑&#xff1a;它們之間有什么區別&am…

服務器配置錯誤導致SSL/TLS出現安全漏洞,如何進行排查?

SSL/TLS 安全漏洞排查與修復指南 一、常見配置錯誤類型? 弱加密算法與密鑰問題? 使用弱密碼套件&#xff08;如DES、RC4&#xff09;或密鑰長度不足&#xff08;如RSA密鑰長度<2048位&#xff09;&#xff0c;導致加密強度不足。 密鑰管理不當&#xff08;如私鑰未加密存…

Day20打卡-奇異值SVD分解

今天學習非特征篩選的方法&#xff1a; 知識點回顧&#xff1a; 線性代數概念回顧&#xff08;可不掌握&#xff09;奇異值推導&#xff08;可不掌握&#xff09;奇異值的應用 特征降維&#xff1a;對高維數據減小計算量、可視化數據重構&#xff1a;比如重構信號、重構圖像&am…

temu采購自養號全流程解析:從賬號搭建到安全下單的技術閉環

temu 自養號采購下單技術是一個精細的過程&#xff0c;需要從多個方面進行考慮和操作&#xff0c;其核心在于通過技術手段模擬真實用戶行為&#xff0c;構建獨立、安全的賬號環境以確保賬號的安全性、真實性和采購下單的成功率。以下是對該技術的詳細解析 1. 賬號準備 手機號…

相機Camera日志分析之八:高通Camx HAL架構opencamera三級日志詳解及關鍵字

【關注我,后續持續新增專題博文,謝謝!!!】 上一篇我們講了:相機Camera日志分析之七:高通Camx HAL架構opencamera二級日志詳解及關鍵字 這一篇我們開始講: 相機Camera日志分析之八:高通Camx HAL架構opencamera三級日志詳解及關鍵字 目錄 【關注我,后續持續…

自定義類型-結構體(二)

結構體內存對齊 偏移量 指的是結構體中某個成員相對于結構體起始地址的字節距離 第一個成員的起始位置為0&#xff0c;一個字節表示一個單位 這里的數字表示的是該成員地址與結構體首地址之間的值 對齊規則 1.結構體第一個成員的第一個字節的偏移量為0 2.其余成員變量要…

【免費工具】圖吧工具箱2025.02正式版

DIY愛好者的必備工具 軟件截圖&#xff1a; —————【下 載 地 址】——————— 【本章單下載】&#xff1a;https://drive.uc.cn/s/f08aad37ddb14 【百款黑科技】&#xff1a;https://ucnygalh6wle.feishu.cn/wiki/HPQywvPc7iLZu1k0ODFcWMt2n0d?fromfrom_copylink …

DAX 權威指南1:DAX計算、表函數與計算上下文

參考《DAX 權威指南 第二版》 文章目錄 二、DAX簡介2.1 理解 DAX 計算2.2 計算列和度量值2.3 變量2.3.1 VAR簡介2.3.2 VAR的特性 2.4 DAX 錯誤處理2.4.1 DAX 錯誤類型2.4.1.1 轉換錯誤2.4.1.2 算術運算錯誤2.4.1.3 空值或 缺失值 2.4.2 使用IFERROR函數攔截錯誤2.4.2.1 安全地進…

【Linux系統】從零開始構建簡易 Shell:從輸入處理到命令執行的深度剖析

文章目錄 前言一、打印命令行提示符代碼功能概述 二、讀取鍵盤輸入的指令2.1 為什么不繼續使用scanf()而換成了fgets()&#xff1f;2.2 調試輸出的意義2.3 為什么需要去掉換行符&#xff1f; 三、指令切割補充知識&#xff1a; strtok 的函數原型 四、普通命令的執行代碼功能概…

湖倉一體架構在金融典型數據分析場景中的實踐

在數字經濟與金融科技深度融合的今天&#xff0c;數據已成為金融機構的核心戰略資產。然而&#xff0c;傳統數據架構面臨著三大困局&#xff0c;制約著金融機構數據價值的充分釋放。 一、需求驅動更多銀行數據分析場景 金融機構&#xff0c;特別是銀行業&#xff0c;面臨著雙重…

基于Llama3的開發應用(一):Llama模型的簡單部署

Llama模型的簡單部署 0 前言1 環境準備1.1 硬件環境1.2 軟件環境 2 Meta-Llama-3-8B-Instruct 模型簡介2.1 Instruct含義2.2 模型下載 3 簡單調用4 FastAPI 部署4.1 通過FastAPI簡單部署4.2 測試 5 使用 streamlit 構建簡易聊天界面6 總結 0 前言 本系列文章是基于Meta-Llama-…