1. 程式人生 > 其它 >Jenkins構建maven任務、allure測試報告等

Jenkins構建maven任務、allure測試報告等

Jenkins部署

 

 

 

 

 

 

 

一、       安裝啟動Jenkins

安裝jenkins需要jdk1.8環境

  1. 下載

方式1:離線war包

官網下載 https://www.jenkins.io/download/

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/2.274/jenkins.war

或wget https://updates.jenkins.io/download/war/2.274/jenkins.war

方式2:yum安裝(失敗)

yum -y install jenkins 報錯No Presto metadata available for jenkins

  1. 啟動

以linux平臺啟動離線jenkins.war為例

方式1:jar命令啟動

nohup java -jar /home/jenkins.war --httpPort=8080 > output 2>&1 &

output為輸出日誌

方式2:tomcat啟動

參考https://www.cnblogs.com/devtesters/p/4285967.html

  1. 登入

瀏覽器登入jenkins, http://ip:8080

jenkins相關檔案在/root/.jenkins

  1. 更換外掛源(可跳過)

sed -i 's#http://updates.jenkins-ci.org/download#https://mirrors.tuna.tsinghua.edu.cn/jenkins#g' /root/.jenkins /updates/default.json

sed -i 's#http://www.google.com#https://www.baidu.com#g' /root/.jenkins /updates/default.json

重啟jenkins生效

  1. 解鎖jenkins

瀏覽器登入jenkins, http://ip:8080

根據頁面提示解鎖jenkins

安裝推薦的外掛

等待安裝完成(某些外掛安裝失敗也沒關係)

建立管理員使用者並儲存

儲存jenkins url

開始使用jenkins!

 

注意:

如果登入管理員賬號提示密碼錯誤,可嘗試使用解鎖密碼/root/.jenkins/secrets/initialAdminPassword

 

 

 

二、      

拉取svn程式碼

  1. 下載外掛

Manage Jenkins>Manage Plugins>可選外掛,下載Subversion

 

 

  1. 建立svn憑證

Manage Jenkins>Mange Credentials,此處需要svn賬號密碼

 

  1. 建立item

新建item,建立一個Freestyle project

  1. item配置

Discard old builds

 

如需要指定svn版本,則需給定引數

 

原始碼管理,需要svn地址、之前建立的svn憑證

 

構建觸發器、構建環境、構建、構建後操作內容

 

儲存

  1. 構建,拉取程式碼

 

檢視構建情況

 

構建成功,拉取的程式碼在jenkins的workspace下

 

 

 

 

 

三、       maven本地倉庫

下載apache-maven到/home/develop/apache-maven-3.6.3,配置settings.xml檔案,注意本地倉庫位置(自定義)

 

將目標maven下pom.xml放到伺服器上,同級目錄下執行

mvn install -X

拉取maven倉庫到本地倉庫。

 

 

 

 

 

四、       構建maven專案,打war

需要maven環境,此處構建使用如下maven專案配置

 

  1. 下載外掛

Manage Jenkins>Manage Plugins>可選外掛,下載MavenConfig File Provider

 

 

  1. Maven配置

Manage Jenkins>Global Tool Configuration,此處的settings.xml是構建maven專案要用到的(開發提供)

 

注意:settings.xml中可定義倉庫地址

 

Global Tool Configuration中,還需要配置jdk、maven地址

 

 

 

  1. 新建config file

該檔案可替換svn內的配置檔案並編譯到war包中。

選擇Manage Jenkins>Managed files,新增配置檔案

 

 

  1. 建立item

新建item,建立一個Maven專案

 

  1. item配置

General配置:Discard old builds

 

原始碼管理

 

構建觸發器

 

構建環境,加入配置檔案

 

Add timestamps to the Console Output

 

構建前步驟

 

構建,Root POM注意pom.xml位置

Goals and options中填寫clean install -X,可檢視詳細日誌(-X)

 

 

儲存

  1. 構建,打war包

Build Now,檢視控制檯輸出

可以看到BUILD SUCCESS及相應構建內容

 

打war包成功,在item的target目錄中EMS_Finein/target/EMS_Finein.war

 

 

 

Q&A

  1. 報錯Could not find artifact xxx

如:

Failed to transfer Could not find artifact com.persagy:EMS_Finein_Parent:pom:1.0.0 in nexus (http://192.168.101.18:8081/repository/maven-public/)

ERROR: Failed to parse POMs

org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs:

[FATAL] Non-resolvable parent POM for com.persagy:EMS_Finein:[unknown-version]: Could not find artifact com.persagy:EMS_Finein_Parent:pom:1.0.0 in nexus (http://192.168.101.18:8081/repository/maven-public/) and 'parent.relativePath' points at wrong local POM @ line 6, column 10

原因:EMS_Finein_parent下pom.xml中<artifactId>EMS_Finein_Parent</artifactId>首字母大寫,而資料夾名稱EMS_Finein_parent未大寫,導致找不到正確的jar包

 

如:
[ERROR] Failed to execute goal on project EMS_Finein_Communication: Could not resolve dependencies for project com.persagy:EMS_Finein_Communication:jar:1.0.0: Could not find artifact com.persagy:ems_Data:jar:1.0.0 in nexus (http://192.168.101.18:8081/repository/maven-public/) -> [Help 1]
Caused by: org.apache.maven.project.DependencyResolutionException: Could not resolve dependencies for project com.persagy:EMS_Finein_Communication:jar:1.0.0: Could not find artifact com.persagy:ems_Data:jar:1.0.0 in nexus (http://192.168.101.18:8081/repository/maven-public/)
原因:EMS_Finein_Communication下pom.xml中ems_Data與伺服器上http://192.168.101.18:8081/#browse/browse:maven-public的com.persagy.ems_data大小寫不一致,導致找不到正確的jar包
 

解決方案:讓開發更新svn,注意jar包名字

  1. tomcat啟動成功,但war包無法執行
  2. ERROR: No such settings file /root/.jenkins/workspace/DM/ /home/develop/apache-maven-3.6.3/conf/settings.xml exists
原環境jdk 1.7,maven 3.6.1
現環境 jdk1.8,maven3.6.3
原因:EMS_Finein.war中缺少web.xml檔案
解決方案:參考https://www.jianshu.com/p/de0177cac90a,讓開發修改pom.xml,或者使用jenkins的post steps強行把web.xml放進tomcat的webapps/EMS_Finein/WEB-INF中

檢視item配置-build-高階下面的maven settings file配置路徑

 

 

 

 

五、       部署wartomcat容器(熱部署)

  1. 部署tomcat容器

下載tomcat並部署,注意保留tomcat下webapps/manager資料夾

修改tomcat下conf/tomcat-users.xml檔案(約第44行),新增tomcat user內容:

  <role rolename="manager-gui"/>

  <role rolename="manager-status"/>

  <role rolename="manager-script"/>

  <user username="manager" password="manager" roles="manager-gui,manager-script"/>

 

修改tomcat下conf/server.xml,配置容器埠為8888

 

修改webapps/manager/META-INF/context.xml,設定(約第22行)allow="^.*$",即允許所有ip訪問

 

開啟tomcat,sh bin/ startup.sh

 

  1. 建立憑證

Manage Jenkins>Mange Credentials,此處需要填入上一步中tomcat user賬號密碼。

 

  1. 下載外掛

Manage Jenkins>Manage Plugins>可選外掛,下載Deploy to container

 

  1. 建立item及配置

參考第三章的item配置,部署到容器需要新增構建後操作

 

Tomcat URL填寫tomcat所在地址(如圖地址為jenkins本地ip)

  1. 構建,打war包並部署到tomcat中

Build Now,檢視控制檯輸出

 

檢視tomcat中webapps情況,可以看到war包和Context path均正確

 

 

 

Q&A

l  報錯No wars found

ERROR: Step ‘Deploy war/ear to a container’ aborted due to exception: 
java.lang.InterruptedException: [DeployPublisher][WARN] No wars found. Deploy aborted. %n

參考https://blog.csdn.net/qq_39826207/article/details/108629850

解決方案:確保svn程式碼中pom.xml有打war包

修改Jenkins部署WAR/EAR files引數為**/*.war

 

l  報錯java.io.FileNotFoundException: http://192.168.101.8:8888/manager/text/list

ERROR: Build step failed with exception
org.codehaus.cargo.container.ContainerException: Failed to redeploy [/root/.jenkins/workspace/EMS_Finein/EMS_Finein/target/EMS_Finein.war]
Caused by: java.io.FileNotFoundException: http://192.168.101.8:8888/manager/text/list

參考https://blog.csdn.net/qq_39826207/article/details/108635573

解決方案:修改tomcat下conf/tomcat-users.xml檔案,確保正確建立user

          保留tomcat下webapps/manager資料夾

 

l  報錯The username you provided is not allowed to use the text-based Tomcat Manager

org.codehaus.cargo.container.tomcat.internal.TomcatManagerException: The username you provided is not allowed to use the text-based Tomcat Manager (error 403)

參考https://blog.csdn.net/qq574280801/article/details/88667602

解決方案: 修改tomcat下conf/tomcat-users.xml檔案,確保正確建立user

           確保憑證tomcat user的賬號密碼正確

           修改webapps/manager/META-INF/context.xml,設定allow="^.*$"

l  報錯java.net.ConnectException: 拒絕連線 (Connection refused)
ERROR: Build step failed with exception
org.codehaus.cargo.container.ContainerException: Failed to redeploy [/root/.jenkins/workspace/EMS_Finein/EMS_Finein/target/EMS_Finein.war]
Caused by: java.net.ConnectException: 拒絕連線 (Connection refused)

解決方案:開啟tomcat

 

 

 

六、       ssh部署檔案到指定位置(推薦)

  1. 下載外掛

Manage Jenkins>Manage Plugins>可選外掛,下載Publish Over SSH

 

  1. 建立ssh server

Manage Jenkins>Configure System>Publish over SSH,新增SSH Server並填寫相關資訊,注意在SSH Server的高階中去掉“Disable exec”勾選

 

  1. 建立item(Finein_Sqlite)及配置

參考第三章的item配置(此處選擇freestyle專案),建立Finein_Sqlite,部署到指定位置需要新增構建操作。

 

 

 

 

  1. 建立item(EMS_Finein)及配置

參考第三章的item配置,部署到指定位置需要新增post steps

部署war到tomcat_Finein所在路徑並重啟Finein(此處不需要構建後操作部署war到tomcat 容器)

 

  1. 建立item(Web_Finein)及配置

參考第三章的item配置(此處選擇freestyle專案),建立Web_Finein,部署到指定位置需要新增構建操作。

 

 

 

部署Web_Finein到/home/develop/web所在路徑並重啟Web_Finein

 

 

  1. 構建,傳輸檔案

先後構建Finein_Sqlite、EMS_Finien、Web_Finein,檢視構建日誌(以EMS_Finein為例)

 

在遠端伺服器上確認部署是否成功。

 

 

 

 

 

 

七、       Q&A

  1. jenkins傳輸檔案卻不執行命令

 

原因:建立publish over ssh的ssh server時,未給予執行許可權

解決方案:Manage Jenkins>Configure System>Publish over SSH,在SSH Server的高階中去掉“Disable exec”勾選

 

 

 

解決方案:在Manage Jenkins>Configure System>Publish over SSH的SSH Server,高階資訊中去掉Disable exec勾選

  1. publish over ssh只傳輸檔案,不傳資料夾

 

解決方案:在item配置中,修改ssh傳輸的Source files引數為Web_Finein/**

  1. 構建出現UNSTABLE,需檢視日誌具體分析
ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [1]]
Build step 'Send build artifacts over SSH' changed build result to UNSTABLE

原因:參考https://blog.csdn.net/wangfei0904306/article/details/72780617

檢視日誌發現ssh沒有傳輸檔案,直接執行命令

 

Source files引數有誤,不能用./ 開頭表示相對路徑

Remote directory可以用./ 開頭表示相對路徑

 

解決方案:在item配置中,修改ssh傳輸的Source files引數為Web_Finein/**

  1. 構建出現UNSTABLE,需檢視日誌具體分析

SSH: EXEC: STDOUT/STDERR from command [ll /home/develop/file/EMS_Finein] ...

SSH: EXEC: connected

bash: ll: command not found

可以看出jenkins遠端ssh部署不支援命令 ll(ls -l的alias命令)

 

 

 

還有可能是ssh執行的命令不成功,注意命令正確即可

  1. 關於前端包的編譯

 

  1. 報錯 ERROR: Exception when publishing, exception message [Exec timed out or was interrupted after 120,000 ms]

 

參考https://blog.csdn.net/fen_fen/article/details/114844160

 

  1. Caused by: org.codehaus.cargo.container.tomcat.internal.TomcatManagerException: The Tomcat Manager responded "失敗 - 在上下文[/DM]下部署應用程式,但是上下文啟動失敗

原因:war包部署後,啟動失敗(war包更新了,專案配置檔案沒更新,tomcat啟動報錯)