上篇文章羅列了jenkins持續集成的步驟,其中踩到了不少坑,在本篇里記錄下,希望能給大家一些解決問題的思路。
1.構建時,從github拉取代碼失敗:
報錯部分代碼如下:
ERROR: Timeout after 10 minutes ERROR: Error cloning remote repo 'origin' hudson.plugins.git.GitException: Command "/usr/local/git/bin/git fetch --tags --progress -- git@github.com:May-Fan/AutoApiTestDemo.git +refs/heads/*:refs/remotes/origin/*" returned status code 128: stdout: stderr: Warning: Permanently added the RSA host key for IP address '13.229.188.59' to the list of known hosts. remote: Enumerating objects: 581, done.
遇到這個問題,百度過后解決方案如下:
1.檢查ssh key是否配置正確。配置方法上一篇中有講過,必須將公鑰復制到github,私鑰復制到jenkins。如果不確定,可以進入項目->配置->源碼管理:
看看這個地方會不會報錯。我為了演示錯誤的截圖,在github的url后面添加了~,因此報的是無效的倉庫地址。具體需要結合報錯的信息來看。如果不報錯,那ssh key配置無誤了;
2.查看服務器是否安裝了git。同樣也是在上圖的位置,如果git未安裝,會提示git運行出錯,驗證的辦法是在服務器輸入git --version指令;
3.如果上圖中的配置已經不再報錯,項目構建時仍然報錯,需要進入對應項目->工作空間->清理工作空間,然后重新構建;
4.當經歷了1,2,3之后,構建時仍然會報錯,需要考慮是否因為項目內容過多,git加載超時報錯的情況。如下圖,進入項目配置,勾選淺克隆,只拉取最新版本的代碼,可以大大減少構建時間,並將超時的時間從原來默認的10修改為60,重新構建。這樣git部分的指令就不會再報錯了。
2.jenkins無法識別mvn指令
具體報錯信息如下:
+ mvn clean package /tmp/jenkins4746628215257020380.sh: line 9: mvn: command not found Build step 'Execute shell' marked build as failure Finished: FAILURE
解決的思路如下:1.確認服務器中是否安裝了maven;2.確認shell中是否加載了配置文件。
maven確認安裝,而我的shell腳本當中,第一行source /etc/profile也已經加載了配置文件:
source /etc/profile pid=$(ps x | grep api-1.0-SNAPSHOT.jar | grep -v grep | awk '{print $1}') if "[-n '$pid']" ; then kill -9 $pid fi cd api mvn clean package //這行的mvn指令報錯了 cd target pwd BUILD_ID=dontKillMe nohup java -jar api-1.0-SNAPSHOT.jar &
這是因為:jenkins默認情況下執行shell腳本是使用非登錄方式,執行shell腳本時不會去加載/etc/profile。
找到原因后,參考了很多網上的解決方法,比如在shell腳本前添加#!/bin/sh -l,又或者在jenkins中配置全局的maven變量,又或者將maven的文件夾的擁有者和所在組都遞歸賦給jenkins用戶,都沒有解決我的問題。最終我使用了最簡單粗暴的方式,將上面報錯的mvn命令,直接替換成服務器上which mvn得到的絕對路徑:
source /etc/profile pid=$(ps x | grep api-1.0-SNAPSHOT.jar | grep -v grep | awk '{print $1}') if "[-n '$pid']" ; then kill -9 $pid fi cd api //下面的mvn替換成絕對路徑 /home/May/apache-maven-3.6.3/bin/mvn clean package cd target pwd BUILD_ID=dontKillMe nohup java -jar api-1.0-SNAPSHOT.jar &
同時,修改jenkins配置文件:
vim /etc/sysconfig/jenkins //進入后將用戶從jenkins替換成root
重新構建,終於構建成功。