摘要:首發(fā)于樊浩柏科學(xué)院之前一直在使用推薦的發(fā)布方案,缺點(diǎn)是本地依賴環(huán)境,無法隨時(shí)隨地地更新博客。為了擺脫環(huán)境約束進(jìn)而高效寫作,有了下述的發(fā)布方案。我的寫作環(huán)境為,博客發(fā)布在阿里云的上,文章托管在。
首發(fā)于 樊浩柏科學(xué)院
之前一直在使用 Hexo 推薦的發(fā)布方案,缺點(diǎn)是本地依賴 Hexo 環(huán)境,無法隨時(shí)隨地地更新博客。為了擺脫 Hexo 環(huán)境約束進(jìn)而高效寫作,有了下述的發(fā)布方案。
本文的發(fā)布方案中,Git 倉(cāng)庫(kù)只是托管 md 文件,通過 Webhook 通知服務(wù)器拉取 md 文件,然后執(zhí)行構(gòu)建靜態(tài)文件操作,完成一個(gè)發(fā)布過程。
我的寫作環(huán)境為 Typora(Win10),博客發(fā)布在阿里云的 ECS(CentOS)上,文章托管在 GitHub。
需求迭代隨著時(shí)間成本的增高,只能利用碎片時(shí)間來進(jìn)行寫作。因此,我的寫作場(chǎng)景變成了這樣:
習(xí)慣使用 MarkDown 寫原稿,有 MarkDown 編輯器就行;
寫作場(chǎng)地不限定,有電腦就行;
寫作時(shí)間不確定,有靈感就寫;
新的問題之前(包括 Hexo 推薦)的發(fā)布方案,都是先本地編寫 MarkDown 源文件,然后本地構(gòu)建靜態(tài)文件,最后同步靜態(tài)文件到服務(wù)器。發(fā)布流程圖如下:
顯而易見,若繼續(xù)使用之前的發(fā)布方案,那么每當(dāng)更換寫作場(chǎng)地時(shí)都需要安裝 Hexo 環(huán)境,寫作場(chǎng)地和時(shí)間都受到限制,不滿足需求。
新的方案問題主要是,本地受制于構(gòu)建靜態(tài)文件時(shí)需要的 Hexo 環(huán)境,那么是否可以將構(gòu)建靜態(tài)文件操作放到服務(wù)器端?
發(fā)布流程首先,看下新方案的發(fā)布流程圖:
如流程圖所示,整個(gè)發(fā)布系統(tǒng)共涉及到 3 個(gè)環(huán)境,分別為本地(寫作)、Git 倉(cāng)庫(kù)(托管 md 源文件)、服務(wù)器(Web 服務(wù))環(huán)境。在服務(wù)器環(huán)境構(gòu)建靜態(tài)文件,因此只需要在服務(wù)器端安裝 Hexo 環(huán)境。
一個(gè)完整的發(fā)布流程包含 3 個(gè)部分:
流程 ① :寫作流程;
流程 ② :發(fā)布流程;
流程 ③ :構(gòu)建流程;
寫作流程采用按分支開發(fā)策略,當(dāng)寫作完成后,只需要 push 修改到對(duì)應(yīng)分支即可。只要有 MarkDown 編輯器,以及任何文本編輯器,甚至 馬克飛象 都可以隨時(shí)隨地寫作。
當(dāng)然,你可能說還需要 Git 環(huán)境呀?好吧,如果你是一名合格的 Coder,竟然沒有 Git,你知道該干嘛了!再說沒有 Git 環(huán)境,還可以通過 GitHub 來完成寫作。
發(fā)布流程采用 master 發(fā)布策略,當(dāng)需要發(fā)布時(shí),需要將對(duì)應(yīng)開發(fā)分支 merge 到 master 分支,然后push master分支,即可實(shí)現(xiàn)發(fā)布。
構(gòu)建流程這里使用到 Webhook 機(jī)制,觸發(fā)服務(wù)器執(zhí)行構(gòu)建操作,構(gòu)建腳本見 Webhook 腳本 部分。
當(dāng)流程 ① 和 ② 結(jié)束后,Git 倉(cāng)庫(kù)都會(huì)向服務(wù)器發(fā)起一次 HTTP 請(qǐng)求,記錄如下:
當(dāng)收到構(gòu)建請(qǐng)求后,執(zhí)行構(gòu)建操作。構(gòu)建流程圖如下:
首先檢查當(dāng)前變更分支,只有為 master 分支時(shí),執(zhí)行 pull 操作拉取 md 文件更新,然后再執(zhí)行 hexo g完成靜態(tài)文件的構(gòu)建。
Webhook腳本Webhook 腳本使用 PHP 實(shí)現(xiàn),代碼如下:
主流程方法如下:
public function run() { //校驗(yàn)token if ($this->checkToken()) { echo "ok"; } else { echo "error"; } fastcgi_finish_request(); //返回響應(yīng) if ($this->checkBranch()) { //校驗(yàn)分支 $this->exec(); //執(zhí)行操作邏輯 } }
這里使用 shell 腳本實(shí)現(xiàn)構(gòu)建所需的所有操作,方便擴(kuò)展。執(zhí)行操作方法如下:
public function exec() { //shell文件 $path = $this->config["bash_path"]; $result = shell_exec("sh $path 2>&1"); $this->accessLog($result); return $result; }
構(gòu)建 shell 腳本如下:
#!/usr/bin/env bash export NODE_HOME=/usr/local/node export PATH=$NODE_HOME/bin:$PATH pwd="/data/html/hexo" cd $pwd/source git pull cd $pwd $pwd/node_modules/hexo/bin/hexo g總結(jié)
新發(fā)布方案與之前方案的區(qū)別是:前者只需本地編寫 md 文件,博客服務(wù)器構(gòu)建靜態(tài)文件;后者本地編寫 md 文件后,需要本地構(gòu)建靜態(tài)文件,然后博客服務(wù)器只同步靜態(tài)文件。
當(dāng)然,有很多辦法可以解決當(dāng)前問題,比如可以使用 持續(xù)集成。本文只是提供一個(gè)發(fā)布思路,在項(xiàng)目的生成環(huán)境中,我們也很容易應(yīng)用上這種發(fā)布思路,開發(fā)出自己的發(fā)布系統(tǒng)。
相關(guān)文章 ?
啟用Hexo開源博客系統(tǒng)(2017-03-01)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/31102.html
摘要:首發(fā)于樊浩柏科學(xué)院之前一直在使用推薦的發(fā)布方案,缺點(diǎn)是本地依賴環(huán)境,無法隨時(shí)隨地地更新博客。為了擺脫環(huán)境約束進(jìn)而高效寫作,有了下述的發(fā)布方案。我的寫作環(huán)境為,博客發(fā)布在阿里云的上,文章托管在。 首發(fā)于 樊浩柏科學(xué)院 之前一直在使用 Hexo 推薦的發(fā)布方案,缺點(diǎn)是本地依賴 Hexo 環(huán)境,無法隨時(shí)隨地地更新博客。為了擺脫 Hexo 環(huán)境約束進(jìn)而高效寫作,有了下述的發(fā)布方案。 show...
摘要:配置觸發(fā)方式一般會(huì)得到這么個(gè)語雀配置配置一個(gè)倉(cāng)庫(kù)的可以選擇所有更新觸發(fā)或者主動(dòng)觸發(fā),主動(dòng)觸發(fā)的意思即發(fā)布需要勾選一個(gè)選項(xiàng)才會(huì)觸發(fā)。 Hexo + Github + 語雀 + yuque-hexo +travis-ci+severless 打造全自動(dòng)持續(xù)集成個(gè)人博客,云端寫作,自動(dòng)部署,完美體驗(yàn)~ 一、Hexo+Github 的痛點(diǎn) 1.為啥要用hexo+github? 作為一個(gè)程序猿,...
摘要:配置觸發(fā)方式一般會(huì)得到這么個(gè)語雀配置配置一個(gè)倉(cāng)庫(kù)的可以選擇所有更新觸發(fā)或者主動(dòng)觸發(fā),主動(dòng)觸發(fā)的意思即發(fā)布需要勾選一個(gè)選項(xiàng)才會(huì)觸發(fā)。 Hexo + Github + 語雀 + yuque-hexo +travis-ci+severless 打造全自動(dòng)持續(xù)集成個(gè)人博客,云端寫作,自動(dòng)部署,完美體驗(yàn)~ 一、Hexo+Github 的痛點(diǎn) 1.為啥要用hexo+github? 作為一個(gè)程序猿,...
摘要:為什么不選擇其他方案在文章的開頭我有提到,我曾經(jīng)嘗試過用,,自行搭建服務(wù)等途徑去嘗試維護(hù)博客。但這些嘗試的結(jié)果均不合我意,最后無疾而終。我們使用作為博客平臺(tái),也就是相當(dāng)于管理后端。showImg(https://user-gold-cdn.xitu.io/2019/5/22/16adf79473dbdf59); 對(duì)于愛寫東西的人來說,挑一個(gè)合適的博客平臺(tái)是非常重要的。而作為一個(gè) Web 開發(fā)...
摘要:為什么不選擇其他方案在文章的開頭我有提到,我曾經(jīng)嘗試過用,,自行搭建服務(wù)等途徑去嘗試維護(hù)博客。但這些嘗試的結(jié)果均不合我意,最后無疾而終。我們使用作為博客平臺(tái),也就是相當(dāng)于管理后端。 showImg(https://segmentfault.com/img/remote/1460000019265125?w=700&h=420); 對(duì)于愛寫東西的人來說,挑一個(gè)合適的博客平臺(tái)是非常重要的。...
閱讀 3598·2021-11-04 16:06
閱讀 3594·2021-09-09 11:56
閱讀 857·2021-09-01 11:39
閱讀 908·2019-08-29 15:28
閱讀 2302·2019-08-29 15:18
閱讀 840·2019-08-29 13:26
閱讀 3340·2019-08-29 13:22
閱讀 1055·2019-08-29 12:18