摘要:任務(wù)描述使用的來發(fā)布多個(gè)目錄使用的忽略所有結(jié)尾的文件。任務(wù)描述使用的配置項(xiàng)在項(xiàng)目發(fā)布后重啟進(jìn)程忽略當(dāng)次構(gòu)建過程并提交一次使用的配置項(xiàng)設(shè)置每個(gè)遠(yuǎn)程命令超時(shí)時(shí)間為秒。下一期地址使用發(fā)布前端項(xiàng)目安全篇官方交流群
前言本系列文章共分為基礎(chǔ)篇,安全篇,拓展篇。
曾幾何時(shí),我相信部分Web Developer(包括我)使用的項(xiàng)目發(fā)布方式比較傳統(tǒng)(使用xftp或者sublime text的插件sftp等),發(fā)布方式簡單又粗暴,想發(fā)布哪個(gè)目錄就直接上傳覆蓋...
但是這種方式對于現(xiàn)在的前端項(xiàng)目有些弊端:
若項(xiàng)目包含webpackgulp等構(gòu)建工具,則每次發(fā)布都需要等待構(gòu)建完成后再手動(dòng)上傳,效率低;
若項(xiàng)目為前端的服務(wù)端渲染項(xiàng)目,例如vue的服務(wù)端渲染,那么項(xiàng)目上傳服務(wù)器后還得登錄服務(wù)器重啟進(jìn)程;
發(fā)布時(shí)由于選錯(cuò)文件或者選錯(cuò)發(fā)布環(huán)境導(dǎo)致的上傳(>﹏<)悲劇,可沒有后悔藥吃。
我知道你想告訴我還可以使用git webhook等自動(dòng)化工具,的確這是一種比較高級(jí)的用法,也非常可靠,但是搭建過程對于新手還是比較麻煩的,而且前端還是不太同于服務(wù)端,前端項(xiàng)目大多需要構(gòu)建,那么構(gòu)建過程究竟放在服務(wù)端還是本地,這是一個(gè)問題。
我理想中的發(fā)布器應(yīng)該是易于搭建,通過配置文件就能選擇發(fā)布到不同的環(huán)境,敲完一行發(fā)布命令就可以去泡杯茶,讓它自己完成整個(gè)發(fā)布流程。
于是,fjpublish就誕生了。它是一個(gè)不同于git webhook的發(fā)布思路,基于nodejs的能力自動(dòng)化整個(gè)發(fā)布流程,順便把git提交一下...
安裝如果你已經(jīng)安裝了nodejs (6.0+),那么只需要一個(gè)命令就能完成fjpublish的安裝
npm install fjpublish -g
全局安裝就可以在任意路徑下使用fjpublish這個(gè)命令了。
注意: fjpublish依賴一份配置文件,默認(rèn)是fjpublish.config.js,如果不想在版本庫中提交服務(wù)器安全信息,請千萬記得把它加入忽略文件中,如.gitignore
fjpublish命令行默認(rèn)會(huì)讀取當(dāng)前工作目錄下的fjpublish.config.js文件,該文件返回一個(gè)對象,結(jié)構(gòu)如下:
module.exports = { //modules開始 modules: [{ name: "測試環(huán)境", //標(biāo)識(shí)要發(fā)布的環(huán)境描述 env: "test", //發(fā)布環(huán)境的唯一標(biāo)識(shí) ssh: { host: "12.23.345.678", //遠(yuǎn)程服務(wù)器ip username: "root", //登錄服務(wù)器的用戶名 //rc版本的user選項(xiàng)和userName選項(xiàng)請?jiān)谖磥斫y(tǒng)一配置為username password: "12345678", //登錄服務(wù)器的密碼 }, buildCommand: "build", //要進(jìn)行構(gòu)建的命令build => npm run build localPath: "example", //項(xiàng)目中要發(fā)布的目錄 remotePath: "/www/example", //項(xiàng)目中要發(fā)布到遠(yuǎn)程服務(wù)器的目錄 tag: "123" //標(biāo)注發(fā)布的版本,可不設(shè)置 }, { ... }], //modules結(jié)束 nobuild: true, //modules外的字段可用于每一個(gè)module繼承,這里僅用于舉例 tag: "v1", //modules外的字段可用于每一個(gè)module繼承,這里僅用于舉例 }
以上展示了一個(gè)簡單的配置,關(guān)于使用fjpublish和閱讀本文檔,還需明白以下幾個(gè)概念:
modules數(shù)組中每一個(gè)對象(也稱module)代表一個(gè)發(fā)布環(huán)境,在本文檔中module指在配置文件中任意一個(gè)環(huán)境配置module
在本文檔中config指代module.exports輸出的所有字段(包含modules在內(nèi))的對象。
config中modules字段外的字段在初始后將并入每一個(gè)module,優(yōu)先級(jí)為module > config,也可以理解為module繼承自config。
config中modules字段外的字段不僅僅為了繼承給module實(shí)例也可以是為了定義某些全局的配置字段。
聽起來好像一頭霧水,建議看完例子再重新理解以上內(nèi)容
例子讓我們閑話少說,先上幾個(gè)例子來了解fjpublish能做什么。
1. 簡單例子發(fā)布一個(gè)項(xiàng)目文件到遠(yuǎn)程環(huán)境,并備份舊文件。
任務(wù)描述以提示器的方式選擇發(fā)布到測試環(huán)境
配置文件// 項(xiàng)目根目錄下fjpublish.config.js module.exports = { modules: [{ name: "測試環(huán)境", env: "test", ssh: { host: "192.168.0.xxx", username: "root", //登錄服務(wù)器的用戶名 //rc版本的user選項(xiàng)和userName選項(xiàng)請?jiān)谖磥斫y(tǒng)一配置為username password: "xxxxxx", }, buildCommand: "webpack", localPath: "example", remotePath: "/www/manman/test", },{ name: "預(yù)發(fā)布環(huán)境", env: "pre_release", //剩余配置參考‘測試環(huán)境’ },{ name: "正式環(huán)境", env: "pre_release", //剩余配置參考‘測試環(huán)境’ }] }
// 項(xiàng)目根目錄下package.json // 用于使用構(gòu)建命令npm run webpack來調(diào)用webpack ... "scripts": { "webpack": "webpack --config example/webpack/build/build.js" }, ...發(fā)布命令
fjpublish env -s動(dòng)態(tài)圖
可以使用命令fjpublish env
對于不需要構(gòu)建的項(xiàng)目,不需要準(zhǔn)備package.json,并在配置文件中設(shè)置nobuild選項(xiàng);
nobuild: true
對于某次發(fā)布臨時(shí)不需要構(gòu)建的,請?jiān)诿钪惺褂?b>--nobuild選項(xiàng)
fjpublish env2. 多目錄發(fā)布--nobuild
有些時(shí)候我們的項(xiàng)目需要發(fā)布的文件夾不止一個(gè),或者需要忽略某些文件,那么就需要調(diào)整發(fā)布方式。
任務(wù)描述使用module的localPathEntries來發(fā)布多個(gè)目錄;
使用module的localPathIgnore忽略所有txt結(jié)尾的文件。
項(xiàng)目文件結(jié)構(gòu) 配置文件// 項(xiàng)目根目錄下fjpublish.config.js module.exports = { modules: [{ name: "測試環(huán)境", env: "test", ssh: { host: "192.168.0.xxx", username: "root", //登錄服務(wù)器的用戶名 //rc版本的user選項(xiàng)和userName選項(xiàng)請?jiān)谖磥斫y(tǒng)一配置為username password: "xxxxx", }, buildCommand: "webpack", localPathEntries: ["example", "lib"], localPathIgnore: "**/*.txt", remotePath: "/www/manman/multiple", }], }發(fā)布命令
fjpublish env test動(dòng)態(tài)圖
如果把配置改一下,那么發(fā)布的項(xiàng)目結(jié)構(gòu)將完全不同,那么聰明的你猜猜修改上文配置的localPath和localPathEntries會(huì)發(fā)生什么吧;
... localPath: "example/webpack", //當(dāng)localPathEntries存在時(shí)localPath可不填,不填意味著項(xiàng)目根目錄 localPathEntries: ["build", "dist"], ...
若項(xiàng)目為多目錄發(fā)布,則遠(yuǎn)程目錄的備份規(guī)則也將變?yōu)橐赃@些子目錄為備份源。
3. 遠(yuǎn)程后置命令對于需要重啟服務(wù)的項(xiàng)目,fjpublish也是支持的。
任務(wù)描述使用module的配置項(xiàng)postCommands在項(xiàng)目發(fā)布后重啟pm2進(jìn)程;
忽略當(dāng)次構(gòu)建過程并提交一次git;
使用module的配置項(xiàng)ssh2shell設(shè)置每個(gè)遠(yuǎn)程命令超時(shí)時(shí)間為20秒。
配置文件// 項(xiàng)目根目錄下fjpublish.config.js module.exports = { modules: [{ name: "測試環(huán)境", env: "test", ssh: { host: "192.168.0.xxx", username: "root", //登錄服務(wù)器的用戶名 //rc版本的user選項(xiàng)和userName選項(xiàng)請?jiān)谖磥斫y(tǒng)一配置為username password: "xxxxxx", }, ssh2shell: { idleTimeOut: 20000 }, postCommands: ["pm2 reload xxx"], buildCommand: "build", localPath: "example", remotePath: "/www/manman/test", }] }發(fā)布命令
fjpublish env test --nobuild --commit "遠(yuǎn)程后置命令"動(dòng)態(tài)圖
有備份項(xiàng)目的功能那當(dāng)然得有還原的辦法啦。
任務(wù)描述還原版本預(yù)發(fā)布環(huán)境至tag標(biāo)記為‘自定義tag的版本’的版本;
配置文件// 項(xiàng)目根目錄下fjpublish.config.js module.exports = { modules: [{ name: "預(yù)發(fā)布環(huán)境", env: "pre_release", ssh: { //略 }, localPath: "example", remotePath: "/www/zhangchao/pre_release", }], }還原命令
fjpublish recover pre_release動(dòng)態(tài)圖
可以使用命令fjpublish recover pre_release -p, --previous 快速還原至上個(gè)版本而不需要選擇;
可以使用選項(xiàng)recoverTemplate自定義版本列表模板;
快速還原一樣也會(huì)執(zhí)行postCommands配置的后置命令。
結(jié)語以上的例子描述了fjpublish中最基本的功能,fjpublish也有強(qiáng)大拓展能力,感興趣的童鞋可以直接移步官方文檔了解更多,別忘了在github上給我點(diǎn)個(gè)star哦。
下一期我們將談?wù)撊绾问褂胒jpublish進(jìn)行安全發(fā)布,拜拜∩__∩y。
下一期地址:使用fjpublish發(fā)布前端項(xiàng)目(安全篇)
fjpublish官方交流群:608809145
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/89391.html
摘要:本系列文章共分為基礎(chǔ)篇,安全篇,拓展篇。免密發(fā)布安全等級(jí)配置文件中的選項(xiàng)完全就是庫的選項(xiàng),那么熟悉登錄服務(wù)器的同學(xué)應(yīng)該知道可以免密登錄服務(wù)器。不過較真來說,這對于的開發(fā)者及依賴庫的開發(fā)者而言私鑰文件還是可以讀取到的,不能算絕對安全。 本系列文章共分為基礎(chǔ)篇,安全篇,拓展篇。如果還不了解fjpublish或者不知本文所云的童鞋請先花個(gè)5分鐘看看基礎(chǔ)篇:使用fjpublish發(fā)布前端項(xiàng)目(...
摘要:簡介是一款通過配置文件就能完成發(fā)布項(xiàng)目到各個(gè)環(huán)境的命令行工具,意在創(chuàng)建可靠舒適的發(fā)布項(xiàng)目體驗(yàn),同時(shí)它也有豐富的和完善的可拓展能力,讓開發(fā)者輕松定制項(xiàng)目發(fā)布流程。 fjpublish簡介 fjpublish是一款通過配置文件就能完成發(fā)布項(xiàng)目到各個(gè)環(huán)境的命令行工具,意在創(chuàng)建可靠舒適的發(fā)布項(xiàng)目體驗(yàn),同時(shí)它也有豐富的API和完善的可拓展能力,讓開發(fā)者輕松定制項(xiàng)目發(fā)布流程。 前言 曾幾何時(shí),我相...
摘要:延伸閱讀學(xué)習(xí)與實(shí)踐資料索引與前端工程化實(shí)踐前端每周清單半年盤點(diǎn)之篇前端每周清單半年盤點(diǎn)之與篇前端每周清單半年盤點(diǎn)之篇 前端每周清單專注前端領(lǐng)域內(nèi)容,以對外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點(diǎn);分為新聞熱點(diǎn)、開發(fā)教程、工程實(shí)踐、深度閱讀、開源項(xiàng)目、巔峰人生等欄目。歡迎關(guān)注【前端之巔】微信公眾號(hào)(ID:frontshow),及時(shí)獲取前端每周清單;本文則是對于半年來發(fā)布的前端每周清單...
摘要:前端每周清單專注前端領(lǐng)域內(nèi)容,以對外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點(diǎn)分為新聞熱點(diǎn)開發(fā)教程工程實(shí)踐深度閱讀開源項(xiàng)目巔峰人生等欄目。對該漏洞的綜合評(píng)級(jí)為高危。目前,相關(guān)利用方式已經(jīng)在互聯(lián)網(wǎng)上公開,近期出現(xiàn)攻擊嘗試爆發(fā)的可能。 前端每周清單專注前端領(lǐng)域內(nèi)容,以對外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點(diǎn);分為新聞熱點(diǎn)、開發(fā)教程、工程實(shí)踐、深度閱讀、開源項(xiàng)目、巔峰人生等欄目。歡...
摘要:雅虎從很早就開始招聘和培養(yǎng)研究型人才,雅虎研究院就是在這個(gè)過程中應(yīng)運(yùn)而生的。今天我就來說一說雅虎研究院的歷史,以及過去十多年間取得的成就,聊一聊如何通過引進(jìn)高級(jí)人才,迅速構(gòu)建起一支世界級(jí)的研發(fā)團(tuán)隊(duì)。 showImg(https://segmentfault.com/img/remote/1460000013995512); 作者:王下邀月熊 編輯:徐川 前端每周清單專注大前端領(lǐng)域內(nèi)容,...
閱讀 1010·2023-04-25 14:45
閱讀 2790·2021-09-30 09:59
閱讀 3132·2021-09-22 15:48
閱讀 2432·2019-08-30 15:55
閱讀 3485·2019-08-30 15:44
閱讀 551·2019-08-29 14:07
閱讀 3420·2019-08-26 13:45
閱讀 545·2019-08-26 11:31