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