使用Jenkins持續(xù)集成的一些經(jīng)驗總結(jié)

持續(xù)更新中...


拉取代碼偶發(fā)出現(xiàn): ssh_exchange_identification: Connection closed by remote host

  1. 解決方法一. 把SSH連接數(shù)改大
    修改服務(wù)器上的這個文件:/etc/ssh/sshd_config 找到這行:
# MaxSessions 10 

取消注釋并把數(shù)字改大颠通,最后重啟service sshd restart循狰,然后重新連接即可赎瑰。

  1. 解決方法二. 每次正常退出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ù)甜滨,目前在項目中要想使用這個插件,有以下三種解決辦法:

  1. 將自由風(fēng)格項目切換為流水線風(fēng)格瘤袖;
  2. 服務(wù)器上手動修改項目的config.xml文件以達(dá)到保存配置的效果衣摩;
  3. 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兩個插件滞磺,具體步驟如下:

  1. Jenkins中新建一個Job,該Job專用Jenkins啟動時執(zhí)行的配置命令莱褒;
  2. 在“構(gòu)建觸發(fā)器”模塊击困,選擇“Build when job nodes start”選項,Restricted node Label保持空白广凸,Quiet period設(shè)置為0阅茶;
  3. 在“構(gòu)建”模塊,選擇“Execute system Groovy ”谅海,執(zhí)行如下Groovy命令:
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
  1. 重啟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, 方法如下:

  1. 在Jenkins安裝根目錄下找到 jenkins.xml文件浦旱;

  2. 找到service節(jié)點(diǎn)下的arguements子節(jié)點(diǎn),并在最后面添加--prefix參數(shù):
    --prefix="/jenkins"由蘑,其中 /jenkins 是自定義的訪問路徑;

  3. 重啟Jenkins服務(wù)闽寡,此時本機(jī)已經(jīng)可以通過http://localhost:29908/jenkins進(jìn)行訪問;

  4. 測試目錄代理訪問;

注意:如果在目錄代理之前,子節(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)以下錯誤信息:

通過查看控制臺的輸出日志,可以看出原因是因為超時了鹿响。如果在限制時間內(nèi)代碼都沒有clone完成羡微,那么就任務(wù)就會被強(qiáng)制殺死:

解決方法:當(dāng)所需要clone的版本庫過大或服務(wù)器網(wǎng)速較差時,clone的時間會超過默認(rèn)的10分鐘惶我。因此需要修改clone的超時時間妈倔。設(shè)置方法如下:

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)建軟連接捕发。

  1. 先下載最新的commons-fileupload-1.4.jar
  2. 創(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
  1. 把舊的commons-fileupload-1.3.1-jenkins-2.jar刪除
  2. 重啟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ù)器。

還原備份:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呈驶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子疫鹊,更是在濱河造成了極大的恐慌袖瞻,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拆吆,死亡現(xiàn)場離奇詭異聋迎,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)枣耀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門霉晕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人捞奕,你說我怎么就攤上這事牺堰。” “怎么了颅围?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵伟葫,是天一觀的道長。 經(jīng)常有香客問我院促,道長筏养,這世上最難降的妖魔是什么斧抱? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮渐溶,結(jié)果婚禮上辉浦,老公的妹妹穿的比我還像新娘。我一直安慰自己茎辐,他們只是感情好宪郊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著荔茬,像睡著了一般废膘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上慕蔚,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天丐黄,我揣著相機(jī)與錄音,去河邊找鬼孔飒。 笑死灌闺,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的坏瞄。 我是一名探鬼主播桂对,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鸠匀!你這毒婦竟也來了蕉斜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤缀棍,失蹤者是張志新(化名)和其女友劉穎宅此,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體爬范,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡父腕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了青瀑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片璧亮。...
    茶點(diǎn)故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖斥难,靈堂內(nèi)的尸體忽然破棺而出枝嘶,到底是詐尸還是另有隱情,我是刑警寧澤蘸炸,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布躬络,位于F島的核電站,受9級特大地震影響搭儒,放射性物質(zhì)發(fā)生泄漏穷当。R本人自食惡果不足惜提茁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望馁菜。 院中可真熱鬧茴扁,春花似錦、人聲如沸汪疮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽智嚷。三九已至卖丸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盏道,已是汗流浹背稍浆。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留猜嘱,地道東北人衅枫。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像朗伶,于是被迫代替她去往敵國和親弦撩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容