Jenkins帶有Publish over FTP插件,安裝后并使用它就能實(shí)現(xiàn)FTP上傳,可以用于構(gòu)建后的發(fā)包操作。我們?cè)谙到y(tǒng)管理中配置好FTP Servers后,并測(cè)試連接通過(guò),按理在Job配置中用Publish over FTP按官網(wǎng)的配置說(shuō)明進(jìn)行配置(Publish Over FTP Plugin),構(gòu)建后就能正常上傳文件??墒俏覀兛赡軙?huì)遇到以后問(wèn)題:
問(wèn)題一:不支持中文目錄
報(bào)錯(cuò)如下:

關(guān)看報(bào)錯(cuò)提示一般人打死都想不到是中文目錄引起的,如果知道其實(shí)解決起來(lái)很容易,做如下配置:
【系統(tǒng)管理】->【系統(tǒng)設(shè)置】->【Publish over FTP】->高級(jí):【Control encoding】->輸入【UTF-8】或者【GB2312】
雖然Jenkins說(shuō)明中推薦中文配置為GB2312,但其實(shí)我們一般通用的作法是設(shè)置為UTF-8,兼容各類(lèi)操作系統(tǒng)和構(gòu)建環(huán)境。
問(wèn)題二:不支持FTP被動(dòng)模式(PASV)
報(bào)錯(cuò)如下:

上網(wǎng)查有關(guān)FTP報(bào)502 Command not implemented錯(cuò)誤,可能都會(huì)說(shuō)到要開(kāi)啟FTP被動(dòng)(PASV)模式,那解決方法就有兩種了,一種是在FTP服務(wù)端開(kāi)啟PASV被動(dòng)模式(一般默認(rèn)兩種模式都開(kāi)啟了,但不排除沒(méi)有開(kāi)啟的情況,就導(dǎo)致這個(gè)問(wèn)題)。我們通過(guò)FlashFXP工具去連接FTP服務(wù)器,也能看出是否開(kāi)啟了PASV模式:

可以看出FTP客戶(hù)端默認(rèn)都是用PASV模式去連接服務(wù)端,如果連接失敗后會(huì)自動(dòng)轉(zhuǎn)為PORT主動(dòng)模式,說(shuō)明我們的Jenkins不會(huì)自動(dòng)去轉(zhuǎn)換連接模式,所以導(dǎo)致了上傳文件報(bào)502錯(cuò)誤。?
所以,另一種方式就是改變Jenkins的FTP連接模式,通過(guò)官網(wǎng)也能找到這一段話:
Use active data mode
By default passive mode will be used to connect to the FTP Server.
In passive mode the client initiates all connections which will allow the client to send files through a firewall that has been configured to refuse all inbound connections (and does not create dynamic rules).
If you want to dissable passive mode, and have the client use PORT commands for the server to connect to the client to retieve the files, then you can check this box.
?從這段話可以看出,我們是需要自己設(shè)置連接模式的(默認(rèn)是PASV模式,至于PORT與PASV兩種模式的區(qū)別,可以上網(wǎng)百度),配置如下:
系統(tǒng)管理】->【系統(tǒng)設(shè)置】->【Publish over FTP】->高級(jí):勾選【Use active data mode】
保存設(shè)置后,再次構(gòu)建項(xiàng)目,就能看到FTP上傳成功了!
