为了解决 博客 写作环境限制的问题,尝试搭建了一个简易的发布系统。Git 仓库只是托管 md 文件,通过 Webhook 通知服务器更新 md 文件,然后执行构建静态文件操作,完成一个发布过程。

需求

随着时间成本的增高,只能利用碎片时间来进行写作。因此,我的写作场景变成了这样:

  • 习惯使用 MarkDown 写原稿,有 MarkDown 编辑器就行;

  • 写作环境不限定,有电脑就行;

  • 写作时间不确定,有灵感就写;

新的问题

之前的发布方案,都是先本地编写 MarkDown 源文件,然后本地构建静态文件,最后同步静态文件到服务器。发布流程图如下:

显而易见,若继续使用之前的发布方案,那么每当更换写作环境时都需要安装 Hexo,写作环境和时间都受到限制,不满足需求。

新的方案

问题主要是,本地受制于构建静态文件时需要的 Hexo 环境,那么是否可以将构建静态文件操作放到服务器端?

发布流程

首先,看下新方案的发布流程图:

如流程图所示,整个发布系统共涉及到 3 个环境,分别为本地(写作)、Git 仓库(托管 md 源文件)、服务器(Web 服务)环境。在服务器环境构建静态文件,因此只需要在服务器端安装 Hexo 环境。

一个完整的发布流程包含 3 个部分:

  • 流程 ① :写作流程;

  • 流程 ② :发布流程;

  • 流程 ③ :构建流程;

写作流程

采用按分支开发策略,当写作完成后,只需要 push 修改到对应分支即可。只要有 MarkDown 编辑器,以及任何文本编辑器,甚至 马克飞象 都可以随时随地写作。

当然,你可能说还需要 Git 环境呀?好吧,如果你是一名合格的 Coder,竟然没有 Git,你知道该干嘛了!再说没有 Git 环境,还可以通过 GitHub 来完成写作。

发布流程

采用 master 发布策略,当需要发布时,需要将对应开发分支 merge 到 master 分支,然后 push master 分支,即可实现发布。

构建流程

这里使用到 Webhook 机制,触发代码更新并部署操作。

当流程 ① 和 ② 结束后,Git 仓库都会向服务器发起一次 HTTP 请求,记录如下:

当收到构建请求后,执行构建操作。构建流程图如下:

首先检查当前变更分支,只有为 master 分支时,执行 pull 操作拉取 md 文件更新,然后再执行 hexo g 完成静态文件的构建。

Webhook脚本

这里直接使用 webhook-cli 工具,只需简单配置即可使用。

新增 hook.json 配置文件,内容如下:

[{"id": "webhook-deploy-hexo","execute-command": "/build_hexo.sh","include-command-output-in-response": true,"trigger-rule":{"and":[{"match":{"type": "payload-hash-sha1","secret": "88E7fe7aDf58d8a42108F0b7c2065d55dF3204D7","parameter":{"source": "header","name": "X-Hub-Signature"}}},{"match":{"type": "value","value": "refs/heads/master","parameter":{"source": "payload","name": "ref"}}}]}}
]

其中,execute-command 为部署脚本路径,secret 为 webhook 参数加密密钥。

部署脚本 execute-command 的内容如下:

#!/bin/bashcd /var/www/blog# 更新代码
git pull# 生成静态资源
npm install --force
# hexo clean
hexo g

总结

新发布方案与之前方案的区别是:前者只需本地编写 md 文件,博客服务器构建静态文件;后者本地编写 md 文件后,需要本地构建静态文件,然后博客服务器只同步静态文件。

当然,有很多办法可以解决当前问题,比如可以使用 持续集成。本文只是提供一个发布思路,在项目的生产环境中,我们也很容易应用上这种发布思路,开发出自己的发布系统。

搭建一个简易的发布系统相关推荐

  1. 简易 文章发布系统——前台界面

    续 简易 文章发布系统--后台管理系统  源自 慕课网 的学习        关于简易文章发布系统--后台管理系统大致已经制作完毕,但是从安全方面来看,程序质量不高,只适合初学者进行学习开发,掌握ph ...

  2. 一步一步用jenkins,ansible,supervisor打造一个web构建发布系统

    新blog地址:http://hengyunabc.github.io/deploy-system-build-with-jenkins-ansible-supervisor/ 一步一步用jenkin ...

  3. 快速搭建一个简易的HTTP服务器用于文件分享与下载

    需要快速搭建一个简易的HTTP服务器进行文件的分享与下载.主要有以下两种方法: 1. 使用python 来实现 import http.server import socketserverPORT = ...

  4. 如何搭建一个简易的Web框架

    Web框架本质 什么是Web框架, 如何自己搭建一个简易的Web框架?其实, 只要了解了HTTP协议, 这些问题将引刃而解. 简单的理解:  所有的Web应用本质上就是一个socket服务端, 而用户 ...

  5. Spring Security和 JWT两大利器来打造一个简易的权限系统。

    写在前面 关于 Spring Security Web系统的认证和权限模块也算是一个系统的基础设施了,几乎任何的互联网服务都会涉及到这方面的要求.在Java EE领域,成熟的安全框架解决方案一般有 A ...

  6. 使用python搭建一个简易的本地局域网

    使用python搭建一个简易的本地局域网 1.设置python路径为环境变量// python3 2.命令行输入python -m http.server 8888// 或python2 2.命令行输 ...

  7. 搭建一个简易的医疗导诊系统

    这里我们来介绍一个简易的医疗导诊系统,基于我们产品有五大测量的功能:心电,血氧,血压,血糖和体脂.这个医疗导诊系统主要是通过用户描述的一些症状来判断用户可能的指标异常,然后引导用户进行相关指标的测量, ...

  8. HTML+CSS+PHP+COOKIE在本地搭建一个简易的登陆注册网页

    昨天晚上看了一叶飘零大佬的直播,大佬说:初学者最好自己先动手去做一些项目,这样能更好的了解原理,恰好学长要求做一个简易的登陆注册系统,利用这个机会再学习一波. 做了两天,搞懂了很多概念,也遇到了很多问 ...

  9. 从0到1搭建简单的灰度发布系统

    系统发布的演进之路 一般情况下我们系统发布需要将老系统关掉,然后将新系统进行启动,这种发布方式就会有一个比较致命的问题:服务短暂不可用,如果新代码存在bug可能会造成更长时间的故障,那么业界的前辈们想 ...

最新文章

  1. SAP RETAIL 通过自动补货功能触发采购申请
  2. 第十六届全国大学生智能车竞赛全部比赛胜利结束了
  3. 双系统装完只能u盘启动_苹果电脑安装双系统,切换MacOx系统和Windows系统!
  4. uwsgi gevent
  5. php中data(,如何使用php中的data函数
  6. js中直接对字符串转义-用于solr ulr 关键词转义
  7. Dvbbs8严重漏洞
  8. (计算机组成原理)第二章数据的表示和运算-第二节1:定点数的表示(原码、反码、补码和移码)
  9. 【ES6】模块功能的实现--export / import 命令
  10. 太耿直了!自家总监评拯救者Y90的640GB超大存储:用来吹牛的
  11. C++文件读写 ifstream ofstream 完成复制文件功能
  12. 关于软件工程的课程建议
  13. ENVI5.3安装教程(含软件下载)
  14. 第三讲 信息资产的分类与控制
  15. 英语4级的分数如何计算机,英语四级分数如何计算
  16. A1059. 求解二元整数不定方程
  17. Noip2011 Day1 T1 铺地毯(模拟)
  18. windows8.1 下搭建配置apache+php+mysql
  19. 计算机领域会议期刊,数据挖掘等计算机领域顶级会议期刊~(转)
  20. html图片重叠鼠标点击更换,html实现点击预览图切换图片方法

热门文章

  1. 调节阀的结构原理你知道多少呢
  2. 下载调试接口 JTAG vs SWD
  3. C语言整理之消息队列
  4. Bootstrap网页切版练习(一) - 响应式交错版
  5. oracle查看expdp进度,备份之监控数据备份恢复完成进度(EXPDP/IMPDP/RMAN)
  6. django+mysql超市管理系统-计算机毕业设计源码26073
  7. Structured Streaming-快速入门
  8. DYNAMICALLY DECODING SOURCE DOMAIN KNOWLEDGE FOR UNSEEN DOMAIN GENERALIZATION
  9. 高德地图简单点位+轨迹+描述
  10. 圆形连接器的抗震分析