持續(xù)更新中...
拉取代碼偶發(fā)出現(xiàn): ssh_exchange_identification: Connection closed by remote host
- 解決方法一. 把SSH連接數(shù)改大
修改服務(wù)器上的這個文件:/etc/ssh/sshd_config 找到這行:
# MaxSessions 10
取消注釋并把數(shù)字改大颠通,最后重啟service sshd restart
循狰,然后重新連接即可赎瑰。
- 解決方法二. 每次正常退出SSH連接
每次執(zhí)行完命令后用輸入"exit" 退出, 防止連接數(shù)過多.
Performance插件兼容性問題
自由風(fēng)格項目中翘骂,有使用Performance
插件收集構(gòu)建產(chǎn)物有滑,但是截至到目前最新版本(Jenkins v2.298娄琉,Performance:v3.19)往果,此插件和Jenkins都存在有兼容性問題役听,會導(dǎo)致項目配置頁面table, div錯位颓鲜,而導(dǎo)致無法保存配置,這個問題已經(jīng)存在了好長時間了(至少半年)典予,插件作者一直沒有修復(fù)甜滨,目前在項目中要想使用這個插件,有以下三種解決辦法:
- 將自由風(fēng)格項目切換為流水線風(fēng)格瘤袖;
- 服務(wù)器上手動修改項目的config.xml文件以達(dá)到保存配置的效果衣摩;
- Jenkins版本降級,經(jīng)過測試捂敌,此插件在v2.263.4 LTS上可以正常使用艾扮,降級前做好備份工作,以及考慮其他插件的兼容性問題黍匾。
修改Jenkins 安全策略(CSP)
場景:借助Robot Framework Plugin滑负,可將Robot Framework項目更好的集成到Jenkins中,但是直接在Jenkins 項目中點(diǎn)擊預(yù)覽測試報告搪泳,會出現(xiàn)Opening Robot Framework log failed
的錯誤嗦篱,這是由于Jenkins為了避免受到惡意HTML/JS文件的攻擊,會默認(rèn)將安全策略CSP設(shè)置為:
sandbox; default-src 'none'; img-src 'self'; style-src 'self';
在此配置下,只允許加載Jenkins服務(wù)器上托管的CSS文件和圖片文件霎终。解決辦法需要借助Startup Trigger和Groovy plugin兩個插件滞磺,具體步驟如下:
- Jenkins中新建一個Job,該Job專用Jenkins啟動時執(zhí)行的配置命令莱褒;
- 在“構(gòu)建觸發(fā)器”模塊击困,選擇“Build when job nodes start”選項,Restricted node Label保持空白广凸,Quiet period設(shè)置為0阅茶;
- 在“構(gòu)建”模塊,選擇“Execute system Groovy ”谅海,執(zhí)行如下Groovy命令:
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
- 重啟Jenkins服務(wù)器進(jìn)行測試脸哀,會發(fā)現(xiàn)等待所有節(jié)點(diǎn)連接成功后此項目會立即自動觸發(fā)構(gòu)建。再去觸發(fā)Robot項目構(gòu)建扭吁,等待完成后點(diǎn)擊訪問測試報告頁面撞蜂,會發(fā)現(xiàn)已經(jīng)可以正常訪問了;
自定義Jenkins相對訪問路徑
場景: nginx為Jenkins做目錄代理侥袜,同時站點(diǎn)下還代理了很多其他的應(yīng)用蝌诡,這里需要自定義Jenkins相對訪問路徑。
本機(jī)訪問Jenkins的路徑為:http://localhost:29908枫吧,需要改為:http://localhost:29908/jenkins, 方法如下:
在Jenkins安裝根目錄下找到 jenkins.xml文件浦旱;
找到service節(jié)點(diǎn)下的arguements子節(jié)點(diǎn),并在最后面添加--prefix參數(shù):
--prefix="/jenkins"由蘑,其中 /jenkins 是自定義的訪問路徑;重啟Jenkins服務(wù)闽寡,此時本機(jī)已經(jīng)可以通過http://localhost:29908/jenkins進(jìn)行訪問;
測試目錄代理訪問;
注意:如果在目錄代理之前,子節(jié)點(diǎn)和主節(jié)點(diǎn)之間就已經(jīng)通過JNLP的方式連接好了尼酿,則需要找到子節(jié)點(diǎn)根目錄下的jenkins-slave.xml
文件爷狈,將service.arguements節(jié)點(diǎn)-jnlpUrl
參數(shù)值修改為正確的值。
git clone失敗 : Killed by signal 15
場景:jenkins項目clone代碼時裳擎,出現(xiàn)任務(wù)被kill掉的情況涎永,導(dǎo)致出現(xiàn)以下錯誤信息:Jenkins:Build step 'Execute Windows batch command' marked build as failure
場景:使用Jenkins定時跑接口測試用例,明明所有的用例都執(zhí)行成功了绸贡,但是還是會觸發(fā)執(zhí)行失敗時的郵件通知盯蝴,查看Jenkins控制臺日志毅哗,發(fā)現(xiàn)是由于上面截圖的原因?qū)е碌摹?/p>
解決方法:在bat腳本(shell同樣適用)最后一行加上exit 0,表示正常運(yùn)行程序并退出程序捧挺。
Jenkins運(yùn)行在Tomcat容器中虑绵,替換jar包的方法
背景:jenkins.war中引用的commons-fileupload-1.3.1-jenkins-2.jar
被掃出來有安全隱患,需要替換到最新的1.4版本闽烙,因為掃描的時候是根據(jù)版本來的翅睛,如果直接采用覆蓋并重命名的方法,還是會被掃出來黑竞,目前采取的方法是創(chuàng)建軟連接捕发。
- 先下載最新的commons-fileupload-1.4.jar
- 創(chuàng)建軟鏈接(管理員權(quán)限),Linux系統(tǒng)下同理摊溶。
mklink webapps\jenkins\WEB-INF\lib\commons-fileupload-1.3.1-jenkins-2.jar webapps\jenkins\WEB-INF\lib\commons-fileupload-1.4.jar
- 把舊的commons-fileupload-1.3.1-jenkins-2.jar刪除
- 重啟tomcat
Windows節(jié)點(diǎn)機(jī)無法運(yùn)行jnlp文件
在節(jié)點(diǎn)機(jī)雙擊jnlp文件沒有反應(yīng)時爬骤,可以嘗試用命令行方式運(yùn)行此文件,cmd進(jìn)入jnlp文件目錄下莫换,運(yùn)行javaws slave-agent.jnlp
,可以查看具體的錯誤提示骤铃,如下:
上圖中這種情況拉岁,只需要修改下java安全配置即可解決,其他情況再具體分析惰爬。
關(guān)閉CSRF防護(hù)
Jenkins v2.204.6之前的版本喊暖,要想關(guān)閉CSRF防護(hù),只需要在全局安全配置中禁用相關(guān)配置即可撕瞧,但是較高版本的 Jenkins 默認(rèn)均開啟CSRF防護(hù)且刪除了禁用的入口陵叽。要想禁用CSRF防護(hù),只能通過配置參數(shù)的方式丛版。
Jenkins若是跑在Tomcat下巩掺,只需在tomcat啟動腳本中加入配置如下:
-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true
若是以jar包形式部署的,只需在啟動時加上配置參數(shù)即可页畦。
修改 JVM 的內(nèi)存配置
無論是以 Jdk Jar 方式運(yùn)行Jenkins胖替,還是將 War 包放在 Tomcat等容器下運(yùn)行,都會存在一個問題:默認(rèn) JVM 內(nèi)存分配太少豫缨,這導(dǎo)致啟動或者運(yùn)行一段時間后內(nèi)存溢出報錯 java.lang.OutOfMemoryError: PermGen spac独令。所以,需要在啟動前修改配置文件中的JVM 內(nèi)存配置好芭。
set JAVA_OPTS=
-server
-Xms5000M
-Xmx5000M
-Xss512k
-XX:+AggressiveOpts
-XX:+UseBiasedLocking
-XX:PermSize=256M
-XX:MaxPermSize=512M
-XX:+DisableExplicitGC
-XX:MaxTenuringThreshold=31
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
-XX:+CMSParallelRemarkEnabled
-XX:+UseCMSCompactAtFullCollection
-XX:LargePageSizeInBytes=128m
-XX:+UseFastAccessorMethods
-XX:+UseCMSInitiatingOccupancyOnly
-Djava.awt.headless=true
這里的幾個 JVM 參數(shù)含義如下:
-Xms: 使用的最小堆內(nèi)存大小
-Xmx: 使用的最大堆內(nèi)存大小
-XX:PermSize: 內(nèi)存的永久保存區(qū)域大小
-XX:MaxPermSize: 最大內(nèi)存的永久保存區(qū)域大小這幾個參數(shù)也不是配置越大越好燃箭,具體要根據(jù)所在機(jī)器實(shí)際內(nèi)存和使用大小配置。
配置優(yōu)化減少磁盤空間占用
Job 構(gòu)建歷史較多時舍败,如果沒有配置好清理策略的話招狸,會導(dǎo)致占用大量磁盤空間敬拓,最終可能會因磁盤空間不夠而導(dǎo)致構(gòu)建失敗。并且在加載項目配置時瓢颅,Jenkins也需要花費(fèi)時間分析歷史構(gòu)建記錄恩尾,頁面加載的耗時會相應(yīng)的增加。
丟棄舊的構(gòu)建配置
如上圖挽懦,配置最大保持 2 天之內(nèi)的構(gòu)建翰意,如果超過 2 天的構(gòu)建,則會在Job 執(zhí)行前被清理掉信柿,同時配置了最大保持構(gòu)建數(shù)量為 30 個冀偶,意思就是如果 2 天內(nèi)構(gòu)建次數(shù)如果超過 30 次,則最多保留最近執(zhí)行的 30 個構(gòu)建渔嚷。
使用Disk Uasge插件
不建議进鸠,使用此插件的過程中,發(fā)現(xiàn)可能會導(dǎo)致服務(wù)器卡頓形病。
定時清理tomcat日志
默認(rèn)情況下客年,tomcat每天都會生成新的日志文件,且某些情況下漠吻,產(chǎn)生的日志文件體積會非常大量瓜,如果長期不清理,日志文件會越來越多途乃,占用很多磁盤空間绍傲。
目前的處理方法是在Jenkins新建了一個定時任務(wù),專門用來刪除tomcat產(chǎn)生的日志文件耍共。設(shè)置構(gòu)建超時時間
有些 Job 在執(zhí)行構(gòu)建時烫饼,由于某些原因?qū)е聵?gòu)建掛起,耗時比較長试读,而這些長時間掛起的 Job 會導(dǎo)致 Jenkins 內(nèi)存占用比較大杠纵,性能下降,嚴(yán)重的會直接導(dǎo)致 Jenkins 掛掉鹏往。所以淡诗,我們需要設(shè)置構(gòu)建超時時間來預(yù)防這種事情發(fā)生,一旦超過一定的時間伊履,要讓 Job 自動停止掉韩容,如下:設(shè)置全局屬性
適當(dāng)設(shè)置全局屬性,可以避免在pipeline中重復(fù)寫死一些固定值唐瀑,例如輸出日志地址群凶、接口請求地址等等,而且當(dāng)固定值需要修改時哄辣,只需要修改一次即可请梢,不用去每個文件里面修改赠尾,方便維護(hù)。設(shè)置入口為: 系統(tǒng)管理 -> 系統(tǒng)配置-> 全局屬性-> Environment variables 毅弧,如下圖:統(tǒng)一管理腳本
需要安裝Managed script
插件气嫁,該插件是為了在管理文件時創(chuàng)建 Script 腳本文件,然后在 Job 中配置直接使用够坐,方便腳本的統(tǒng)一管理和維護(hù)寸宵。插件安裝完成后,進(jìn)入“系統(tǒng)管理” —> “Managed files” 元咙,點(diǎn)擊 “Add a new Config” 梯影,并選擇 “Groovy file” 類型,創(chuàng)建一個新的 Groovy 腳本文件庶香,然后輸入我們要執(zhí)行的腳本代碼甲棍,如下:
創(chuàng)建完畢后,我們在 Job 中構(gòu)建處選擇 “Execute managed script” 就可以使用這些腳本了赶掖。
輕量備份
使用ThinBackup
插件感猛,允許我們對Jenkins配置信息進(jìn)行全量或增量備份,由于插件不會保存構(gòu)建歷史和構(gòu)建工件奢赂,所備份過程更為快捷唱遭,并且無需關(guān)閉Jenkins服務(wù)器。
還原備份: