Jenkins 實戰


一. 常用設置

修改Jenkinsfile的路徑

注意大小寫

修改時區

【系統管理】->【腳本命令行】運行下面的命令

System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')

一旦容器重啓就失效了,所以要進入到用戶設置裏面,修改 用戶自定義時區

https://www.jenkins.io/doc/book/using/change-time-zone/

允許匿名用戶訪問

系統設置 >> 全局安全設置,勾選 “匿名用戶具有可讀權限”

自動刪除過期的流水線

爲防止無用的數據佔用太多的存儲空間,可以配置自動刪除策略。
jenkins首頁,點擊任務鏈接 >> 配置 >> 勾選 刪除舊的流水線,設置 保留舊的流水線的最大數

二. 一些坑

問題1. Error fetching remote repo ‘origin’ caused by: ... command "git clean -fdx" returned status code 1: .... permission denied

分析:
這個步驟在jenkinsfile中沒有配置,是系統的默認行爲,看日誌是在 clean git -fdx 的時候刪除文件沒有權限導致的。
所能想到的辦法就是刪除workspace中的文件,重新來過
解決方法:
進入workspace文件夾,刪除裏面的全部文件,再重新觸發流水線

遺留問題:

  1. 爲什麼git clean要去刪除target目錄下的文件
  2. 爲什麼有兩個workspace目錄,而真正起作用確不是docker中配置的

問題2. package ... is already associated with another repository.

分析:package 不在指定的git庫下面
解決方案:查看printdev信息,找到變量的值(如果是全局變量,建議直接在jenkins file腳本中寫死repo的路徑)

到指定的位置修改該變量的值

問題3. 構建失敗但不顯示錯誤

找到錯誤的辦法:
點擊 構建歷史,點擊歷史構建中對應的 圖標

問題4. dial tcp 151.101.228.133:443: connect: connection refused

分析:github的相應域名背後是有cdn服務的,但是cdn指向的ip通常只是近一些,比如日本之類的亞洲IP,但是訪問並不穩定,需要使用https://www.ipaddress.com/ 查看到對應的域名能夠快速的訪問的ip
解決方案:

  1. 在hosts裏面增加配置的方式,暫時解決了問題,很難確保後續IP是否會變動
sudo vim /etc/hosts

增加如下內容:

140.82.114.34 docker.pkg.github.com
199.232.68.133 githubusercontent.com
199.232.68.133 pkg.githubusercontent.com
140.82.112.6 api.github.com
  1. 使用acr(容器註冊表)的方式,即把package存儲到本地的服務器,這種方式需要評估費用,並做好調試

問題5. The JVM should have exited but did not.

The following non-daemon threads are still running (DestroyJavaVM is OK):
Thread[AWT-Shutdown,5,system], stackTrace:java.lang.Object#wait
sun.awt.AWTAutoShutdown#run at line:314
java.lang.Thread#run at line:748

分析:發生這種情況是由於BeanShell服務器正在運行,由於某種原因而沒有退出。結果,java進程將永遠不會退出並且會掛起。
解決方案:
如果jmeter是docker部署的,那麼加上

--systemproperty jmeterengine.force.system.exit=true
docker run --interactive --rm --volume `pwd`/test/jmeter:/jmeter egaillardon/jmeter --nongui --testfile boat-house.jmx --logfile output/result.jtl -Jdomain=HOST -e -o ./output --systemproperty jmeterengine.force.system.exit=true

參考:https://github.com/egaillardon/jmeter

問題6. Failed to connect to api.github.com/13.250.168.23:443

分析:
出現這種問題的時候Github站點訪問一般都有問題,要不就是訪問過慢,要不就是500錯誤
遺留問題:
設置了host,確定不是這個IP;運行命令的jenkins服務器IP也不是這個;我所有部署的服務器都不是這個IP。
所以我的疑問有兩個

  1. 這個斜槓後面的IP究竟代表什麼
  2. 這個IP是從哪裏來的

問題7. 反向代理設置有誤,導致始終無法加載

分析:按照wiki上的說明,分別對jenkins系統 以及 blue 插件進行配置

參考:https://wiki.jenkins.io/display/JENKINS/Jenkins+says+my+reverse+proxy+setup+is+broken
https://wiki.jenkins.io/display/JENKINS/Running+Jenkins+behind+Nginx

問題8. warning: failed to remove src/boat-house-android-proj/.gradle/buildOutputCleanup/outputFiles.bin: Permission denied

分析:沒有權限,jenkins流水線一開始跑的時候,都會運行 git clean -fdx,以確保刪除build過程產生的文件,從而保證每次build都是最新的
解決方案:

    post {
      always {
         # 刪除所有沒有版本管理的文件,在jenkins流水線一開是
         sh "sudo git clean -fdx"
      
         # 太暴力,不建議使用,刪除所有文件,意味着流水線下一次要重新下載所有文件 
         # sh "sudo rm -rf *"
        
         # 刪除指定的文件夾,這種做法不通用,增加了複雜度
        sh "sudo rm -rf src/product-service/api/target"
        sh "sudo rm -rf src/account-service/api/target"
      }
    }

問題9. found orphan containers (xxxx) for this project.If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.

解決方案:查看是否缺少基礎鏡像

問題10. 初始化時,插件安裝失敗

解決方案:進入linux,刪除jenkins容器,刪除jenkins容器的運行目錄,重新配置和安裝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章