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的Name
和MAVEN_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目錄,檢驗虛擬機環境,正常配置,系統可以識別java
和javac
命令,鬱悶中。
解決方案: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 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包沒有上傳到遠程機器上),然後發現需要寫遠程複製命令(但公司的配置並沒有寫,納悶),如下:
注:本地複製命令命令爲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