用 flow.ci 让 Hexo 持续部署
编者按:感谢 @小小小杜 投稿,原文链接Juglans' Blog。如果你也想体验 flow.ci 的自动化持续部署,来 http://flow.ci 首页提交申请,邀请码随后会发送到邮箱:)
flow.ci是一个持续集成(CI)的saas服务平台,就是中国的Travis CI,作用是把你Github上的代码拉过来,通过容器技术自动化完成代码的构建、测试、交付和部署。整个对flow.ci使用下来的感受就是简单,对源码的侵入少,虽然也用了SPA页面,但是速度相当让人满意,连loading都看不见,很感兴趣用了什么前端框架。
为了表示对flow.ci发给我邀请码的感谢,我必须夸一下flow.ci的文宣:让你的代码留下来流出来吧(信!达!雅!)。
本文在《随时随地让Hexo持续部署》基础上用flow.ci对Daocloud平台进行替换,基本思路没有改变,跟Daocloud的代码构建相比,flow.ci是更纯粹的持续集成/部署平台,目前宣称beta时期免费。
改造思路
- 关闭daocloud持续集成功能
- 配置flow.ci持续集成(核心还是私钥的添加)
- 增加触发器
- 在本地提交Hexo主项目修改的
git commit
进行测试
准备工作
仍然保留.daocloud
目录及其中的id_rsa
私钥文件
这一步单列是因为,如果是新项目,就需要增加这个文件,为了在持续集成过程中添加私钥,私钥文件的生成请自己百度。
关闭daocloud持续集成功能
既然要用flow.ci进行集成,自然要关闭Daocloud的持续集成功能,如果是新项目请忽略。
删除源码的中的Dockerfile
和daocloud.yml
配置文件
这一步可选,不删除也不影响部署,但是这两个配置文件并没有起任何作用,如果是新项目请忽略。
实现过程
1. 创建持续集成项目
这一步很简单,按照flow.ci控制台里面的按钮顺着点Create Project->选择CODING代码托管库->选择你的用户->选择你的项目,完成!
这时CODING里面的项目会有两处变化:
- 新增了flow.ci的webhook
- 新增了项目下的部署公钥(只读)
创建过程给两个界面感受一下就行:
以下都是持续集成项目的配置过程。
2. 配置持续集成项目环境
进入Get started with flow.ci界面,选择Create your first flow。我们使用的Hexo基于Node.js,因此选择Node.js default template:
选择Versions为v5.2.0->Create。这时会根据选择的模板(上图有)生成相应的工作流。
3. 配置持续集成项目工作流
这是flow.ci的核心价值,我们的自动部署就在这里实现。
通过每个工作流节点之间的+
号对模板生成的工作流进行改造,改造后如下:
这里新增了一个Custom Script节点和删除了Test节点。
Initialize
保持默认即可,初始环境变量(flow.ci提供)和Node.js的组件版本等信息。
Git Clone
保持默认即可,拉去CODING
代码。
Cache
保持默认即可,对./node_modules
进行缓存,增加下次集成的速度。
Install
保持默认即可,默认执行npm install
安装依赖项。
Custom Scrip
我们自己增加的节点(插件),该过程主要完成:
- Hexo命令行的安装
- 从代码库拷贝私钥并安装私钥,没有私钥将导致
Hexo d
操作的失败 - Hexo静态站点的生成和部署
修改脚本为:
# 安装Hexo命令行工具
flow_cmd "npm install hexo-cli -g" --echo
# 准备并安装私钥
flow_cmd "cp .daocloud/id_rsa ." --echo
flow_cmd "chmod 600 ./id_rsa" --echo
flow_cmd "eval $(ssh-agent)" --echo
flow_cmd "ssh-add ./id_rsa" --echo
# 执行Hexo生成和发布
flow_cmd "hexo clean" --echo
flow_cmd "hexo g" --echo
flow_cmd "hexo d" --echo
4. 配置触发器
配置触发器为master分支有提交时,配置信息在介绍工作流的图有。
5. 手动测试持续集成过程
在项目的jobs标签下,点击Start Build按钮->选择对master
分支进行构建,之后会看到整个工作流的执行过程和日志信息(绿色为成功,蓝色为正在执行)。
小结
本文介绍了从Daocloud进行持续集成/部署改造为flow.ci进行集成/部署的过程,今后的使用和之前的方式一样,向CODING源码库提交push
就可以触发自动部署。
和Daocloud的代码构建相比,flow.ci为持续集成/部署优点如下:
- 更简单、直观的方式,更容易理解
- 除了保存私钥文件在代码库中,整个集成/部署过程没有对源码有任何侵入脚本(相比Daocloud而言)
- 更加丰富的trigger方式
但是这种方式仍然存在私钥原文保存在代码库的安全性问题,这也是我的CODING代码库仍然保持私有的原因。
Done!
以上是 「flow.ci 最佳实践」系列之 @小小小杜的使用分享,希望对你有用。
flow.ci
用 flow.ci 让 Hexo 持续部署的更多相关文章
- CI Weekly #5 | 微服务架构下的持续部署与交付
CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...
- 几分钟看完 flow.ci 全部功能
从 0 到 1,从邀请式内测到收费上线,flow.ci 经历了十个多月的沉淀与打磨.这期间,flow.ci 工程师们奋力赶工,进行了一系列的大功能更新,Bug 修复,功能优化. 这篇文章记录了 flo ...
- CI Weekly #7 | Instgram/Quora 等大公司如何做持续部署?
终于,你们期待的 flow.ci iOS 项目持续集成 开始公测了.在这几个工作日, flow.ci 做了些许「功能优化」与「问题修复」,性能和体验都在持续优化中.比如: iOS 快速入门文档更新: ...
- 使用 flow.ci 快速发布你的项目文档
软件研发的协作过程中,文档是必不可少的一环,有需求文档.接口文档.使用文档等等.当开始写文档时,首先会遇到两个问题: team members 之间如何协作? 文档 OK 后如何分发,去哪里看?如何更 ...
- 【ZZ】谈谈持续集成,持续交付,持续部署之间的区别
谈谈持续集成,持续交付,持续部署之间的区别 http://blog.flow.ci/cicd_difference/ 谈谈持续集成,持续交付,持续部署之间的区别 2016年08月03日 标签:beta ...
- .NET Core微服务之基于Jenkins+Docker实现持续部署(Part 1)
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.CI, CD 与Jenkins 互联网软件的开发和发布,已经形成了一套标准流程,最重要的组成部分就是持续集成(Continuous i ...
- 使用 flow.ci 实现 Android 自动化测试与持续集成
在上篇文章--如何实现 Android 应用的持续部署中,我们使用的是 flow.ci + Github + fir.im 实现 Android 应用的持续部署.对于 Android 开发者,他们可能 ...
- flow.ci + Github + Slack 一步步搭建 Python 自动化持续集成
理想的程序员必须懒惰,永远追随自动化法则.Automating shapes smarter future. 在一个 Python 项目的开发过程中可能会做的事情:编译.手动或自动化测试.部署环境配置 ...
- CI Weekly #11 | 微服务场景下的自动化测试与持续部署
又一周过去了,最近我们的工程师正在搞一个"大事情" --「[flow.ci](http://flow.ci/?utm_source=bokeyuan&utm_medium= ...
随机推荐
- Gambler's Ruin Problem and 3 Solutions
In my stochastic processes class, Prof Mike Steele assigned a homework problem to calculate the ruin ...
- 60行以内写mvc
标题党.几天前看到一个30行写mvc的文章,东施效颦,也动手写了个60行的,功能上略微扩充一些,记录下来,后面有时间可以继续优化. mvc其实是一个观察者模式.view来监听model,所以当mode ...
- premierepro破解
1.安装硬解 360云盘 破解教程:mac sky/破解安装说明.rtf 破解软件:mac sky/Smart Adobe CS6 Blocker v1.1.app 安装文件:mac sky/Prem ...
- SQL Server 2008 R2 下移动数据库的存储位置
使用场景:1. 该数据库增长的较大,存储磁盘空间不足: 2. 在特定情况下该数据库需要移动到另外一块磁盘上(呵呵...我的情况就是之前的磁盘要还给别人) 步骤: 1. 新建查询 SELECT na ...
- QQ在线客服设置
QQ在线客服设置 1.客户在添加QQ在线客服后,需要让用户在线不需要添加为好友就能在线对话,一般默认设置下会显示"您需要添加对方为好友+才能给对方发送会话消息",具体解决方法如下: ...
- MediaWiki安装与配置(Ubuntu 10.4)
实验室准备发布一个网站,本来是准备外包给别人做的,后来自己调研了一下,发现也没有想象的复杂和困难,于是最近一周自己吭哧吭哧地把网站搭好了. 之所以使用Mediawiki,一是考虑到是以实验室发布,不想 ...
- Linux之源码包安装软件
安装准备 安装c语言编辑器 gcc 压缩包 node-v6.2.0-linux-x64.tar.gz 源码包保存位置 /usr/local/src/ 源码包安装位置 /us ...
- Restful.Data v1.0 - 轻量级数据持久层组件, 正式开源发布了
经过几个星期的优化调整,今天 Restful.Data 正式开源发布. 源码地址:https://github.com/linli8/Restful 今天不写那么多废话了,还是重新介绍一下 Restf ...
- ASP.NET MVC 学习笔记(一)
很久很久没有在博客园写过东西了,很多大虾也说过展示自己最好的地方就是有一个博客作为笔记,展示一下自己的学习和研究成果. 最近决心将公司的一款产品改用MVC的方式实现,于是乎就开始在园子里面疯狂的寻找各 ...
- 深入理解CSS弹性盒模型flex
× 目录 [1]版本更迭 [2]display [3]基本概念[4]伸缩容器[5]伸缩项目 前面的话 CSS3引入了一种新的布局模型——flex布局.flex是flexible box的缩写,一般称之 ...