Jenkins使用問題記錄

1. 啓動

使用Jenkins的版本爲2.138.3,下載war包後啓動即可運行:

# 指定使用8080端口,可自定義
java -jar jenkins.war --httpPort=8080

建議後臺啓動,命令如下:

# 1. 啓動
# 指定後臺啓動
nohup java -jar jenkins.war --httpPort=8080 &
# 再指定日誌路徑
appending output to nohup.out

# 2. 停止
# 查看進程號
jobs -l
# 殺死
kill -9 進程號

默認使用Jenkins內置的Jetty,也可以根據自己需求放入其他的Servlet容器(如Tomcat)中。啓動後,它會給一個初始密碼,訪問jenkins需要這個密碼,訪問後安裝社區推薦的插件,最好修改一下密碼;

注:我這邊Jenkins的war包是直接放在/root/jenkins目錄下的,默認Jenkins構建的工作區在/root/.jenkins/workspace目錄下,相對配置文件也都在/root/.jenkins目錄下,必要時可以查看。

2. “構建”模塊中沒有“Maven Version”選項

 在構建時,控制檯出現如下的報錯信息:

[my-jenkins] $ mvn -f SpringData/pom.xml -s /usr/local/apache-maven-3.6.0/conf/settings.xml -gs /usr/local/apache-maven-3.6.0/conf/settings.xml clean package -Dmaven.test.skip=true
FATAL: 命令執行失敗
java.io.IOException: error=2, 沒有那個文件或目錄
	at java.lang.UNIXProcess.forkAndExec(Native Method)
	at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
	at java.lang.ProcessImpl.start(ProcessImpl.java:134)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
Caused: java.io.IOException: Cannot run program "mvn" (in directory "/root/.jenkins/workspace/my-jenkins"): error=2, 沒有那個文件或目錄
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
	at hudson.Proc$LocalProc.<init>(Proc.java:249)
	at hudson.Proc$LocalProc.<init>(Proc.java:218)
	at hudson.Launcher$LocalLauncher.launch(Launcher.java:935)
	at hudson.Launcher$ProcStarter.start(Launcher.java:454)
	at hudson.Launcher$ProcStarter.join(Launcher.java:465)
	at hudson.tasks.Maven.perform(Maven.java:367)
	at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:744)
	at hudson.model.Build$BuildExecution.build(Build.java:206)
	at hudson.model.Build$BuildExecution.doRun(Build.java:163)
	at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:504)
	at hudson.model.Run.execute(Run.java:1819)
	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
	at hudson.model.ResourceController.execute(ResourceController.java:97)
	at hudson.model.Executor.run(Executor.java:429)
Build step '調用頂層 Maven 目標' marked build as failure
SSH: Current build result is [FAILURE], not going to run.
Finished: FAILURE

嘗試解決:到/root/.jenkins/workspace中任務下的模塊中的target目錄下,發現確實沒有jar包,定位到maven出現問題,配置沒有生效。

解決方案:在配置任務時,選擇“調用頂層Maven目標”,發現沒有“Maven版本”(或Maven version)這個選項,系統管理–>全局工具配置–>Maven–>點擊“Maven安裝”–>將“自動安裝”選項改爲非選中狀態–>填寫Maven的NameMAVEN_HOME保存,最後回到任務配置中查看,即可出現“Maven版本這個選項”,然後選擇剛剛填寫的Maven別名再次構建即可。

3. 構建時提示沒有Java環境

 在解決了上述問題後,嘗試進行構建,控制檯又出現下面的異常信息:

[my-jenkins] $ /root/.jenkins/tools/hudson.tasks.Maven_MavenInstallation/Maven-3.6.0/bin/mvn -f SpringData/pom.xml -s /usr/local/apache-maven-3.6.0/conf/settings.xml -gs /usr/local/apache-maven-3.6.0/conf/settings.xml clean package -Dmaven.test.skip=true
which: no java in (/root/.jenkins/tools/hudson.tasks.Maven_MavenInstallation/Maven-3.6.0/bin:/bin:/bin:/root/apache-maven-3.6.0//bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE

根據信息提示是沒有JDK,或者是錯誤的將JAVA_HOME設置成了JRE目錄而非JDK目錄,檢驗虛擬機環境,正常配置,系統可以識別javajavac命令,鬱悶中。

解決方案:Jenkins不能識別自動找到JDK的目錄,需要手動配置,進入系統管理–>全局工具配置,進行如下操作:

配置Jenkins中JDK路徑

再次構建,操作成功。

注:這裏提一點JDK和JRE的概念區別,媽的,以前學java沒搞那麼多,也知道java是用於運行jav程序的命令,javac是用於編譯java程序的,簡單的說JRE是java的運行環境,而JDK是包含了java編譯和運行的環境,即它們都包含java的運行環境JRE,至於編譯環境只有JDK纔會提供,所以現在JDK和JRE的概念應該會分的很清楚。

4. 通過SSH上傳到遠程部署機器

4.1 配置SSH

 遠程部署:簡單點說就是,在機器A上打包好了之後,將jar包上傳到機器B上,這裏使用的SSH Server,所以在Jenkins上首先需要安裝“publish over ssh”插件,重啓即可(前提是兩臺機器已經配置了SSH登錄),關於通過SSH將打包好的jar包上傳到SSH Server時的具體配置如下:

系統管理–>全局設置–>Publish over SSH填寫相關信息即可:

SSH配置

注:上述配置SSH Server時只需要填寫遠程機器的登錄密碼(即這裏的Passphrase)即可,不要填寫主機私鑰文件的位置Path to key,不是這裏使用,然後測試通過即可。

然後在具體任務配置Send build artifacts over SSH時,只需要填寫Name、Source files(Transfers)、Exec command(Transfers)這三項即可,不要作死去點“高級”勾選裏面的選項。

4.2 編碼問題

 在構建完後推送到SSH Server時,出現詭異字符bash^M,具體如下:

編譯報錯

原因:原來的重啓shell腳本太長,爲了方便我直接在windows環境下更改過內容,編碼有問題導致shell腳本執行錯誤,可以用vi或vim打開文本時進行驗證,使用:set ff?命令查看文本類型,如果結果爲fileformat=dos那就是windows平臺創建的文件;

解決方案:如果爲fileformat=dos繼續執行:set ff=unix修改,然後保存退出即可,或者直接將原文件刪除,在Linux中直接使用重新創建;

4.3 SSH連接成功但遠程機器目錄中沒有源文件

 在配置好了SSH Server後,發現遠程機器連得上但遠程目標目錄死活爲空(即jar包沒有上傳到遠程機器上),然後發現需要寫遠程複製命令(但公司的配置並沒有寫,納悶),如下:

SSH上傳

注:本地複製命令命令爲cp file1 file2,相應的SSH遠程複製命令:scp local_file remote_username@remote_ip:remote_file

5 遠程機器無法執行上傳的jar包

 這個問題其實很腦殘,在執行的時候提示我“沒有這個目錄”,然後檢查的時候發現,SSH Server上沒有JDK,當時也沒反應過來,後來一想也是,你上面都沒有java環境怎麼運行jar程序,對吧,所以也安裝一下JDK即可,安裝好了之後,發現無法識別java命令(環境已配置),最後發現必須使用絕對絕對路徑,如下:

# 兩者都要指定絕對路徑
/usr/local/java/jdk1.8.0_191/bin/java -jar /usr/local/test/hello.jar
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章