目標
在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>
項目整體文件解構,如下圖: