用 flow.ci 让 Hexo 持续部署

编者按:感谢 @小小小杜 投稿,原文链接Juglans' Blog。如果你也想体验 flow.ci 的自动化持续部署,来 http://flow.ci 首页提交申请,邀请码随后会发送到邮箱:)

black-cat

flow.ci是一个持续集成(CI)的saas服务平台,就是中国的Travis CI,作用是把你Github上的代码拉过来,通过容器技术自动化完成代码的构建、测试、交付和部署。整个对flow.ci使用下来的感受就是简单,对源码的侵入少,虽然也用了SPA页面,但是速度相当让人满意,连loading都看不见,很感兴趣用了什么前端框架。

为了表示对flow.ci发给我邀请码的感谢,我必须夸一下flow.ci的文宣:让你的代码留下来流出来吧(信!达!雅!)。

本文在《随时随地让Hexo持续部署》基础上用flow.ci对Daocloud平台进行替换,基本思路没有改变,跟Daocloud的代码构建相比,flow.ci是更纯粹的持续集成/部署平台,目前宣称beta时期免费。

flow-ci-slogan

flow.ci-process

改造思路

  • 关闭daocloud持续集成功能

  • 配置flow.ci持续集成(核心还是私钥的添加)

  • 增加触发器

  • 在本地提交Hexo主项目修改的git commit进行测试

准备工作

仍然保留.daocloud目录及其中的id_rsa私钥文件

这一步单列是因为,如果是新项目,就需要增加这个文件,为了在持续集成过程中添加私钥,私钥文件的生成请自己百度。

关闭daocloud持续集成功能

既然要用flow.ci进行集成,自然要关闭Daocloud的持续集成功能,如果是新项目请忽略。

close-daocloud-ci

删除源码的中的Dockerfiledaocloud.yml配置文件

这一步可选,不删除也不影响部署,但是这两个配置文件并没有起任何作用,如果是新项目请忽略。

实现过程

1. 创建持续集成项目

这一步很简单,按照flow.ci控制台里面的按钮顺着点Create Project->选择CODING代码托管库->选择你的用户->选择你的项目,完成!

这时CODING里面的项目会有两处变化:

  • 新增了flow.ci的webhook

  • 新增了项目下的部署公钥(只读)

创建过程给两个界面感受一下就行:

new-project

select-coding

以下都是持续集成项目的配置过程。

2. 配置持续集成项目环境

进入Get started with flow.ci界面,选择Create your first flow。我们使用的Hexo基于Node.js,因此选择Node.js default template

Nodejs-template

选择Versionsv5.2.0->Create。这时会根据选择的模板(上图有)生成相应的工作流。

3. 配置持续集成项目工作流

这是flow.ci的核心价值,我们的自动部署就在这里实现。

通过每个工作流节点之间的+号对模板生成的工作流进行改造,改造后如下:

workflow-trigger

这里新增了一个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分支进行构建,之后会看到整个工作流的执行过程和日志信息(绿色为成功,蓝色为正在执行)。

start-build

building-master

小结

本文介绍了从Daocloud进行持续集成/部署改造为flow.ci进行集成/部署的过程,今后的使用和之前的方式一样,向CODING源码库提交push就可以触发自动部署。

和Daocloud的代码构建相比,flow.ci为持续集成/部署优点如下:

  • 更简单、直观的方式,更容易理解

  • 除了保存私钥文件在代码库中,整个集成/部署过程没有对源码有任何侵入脚本(相比Daocloud而言)

  • 更加丰富的trigger方式

但是这种方式仍然存在私钥原文保存在代码库的安全性问题,这也是我的CODING代码库仍然保持私有的原因。

Done!


以上是 「flow.ci 最佳实践」系列之 @小小小杜 的使用分享,希望对你有用。

flow.ci


firim
Fly It Remotely

fir.im是国内首家提供 App 测试托管分发服务的公司,提供两步发布测试应用的 fir.im, 崩溃分析 BugHD, ...

1.4k 声望
190 粉丝
0 条评论
推荐阅读
fir.im 持续集成技术实践
互联网时代,人人都在追求产品的快速响应、快速迭代和快速验证。不论是创业团队还是大中型企业,都在探索属于自己的敏捷开发、持续交付之道。fir.im 团队也在全面实施敏捷,并推出新持续集成服务— flow.ci ,以帮...

firim阅读 3.6k

jenkins2 安装及启动
jenkins是一个开源的,自动化运行整合工具,可通过一系列的插件来实现持续构建集成,自动化接口/UI测试、运维等功能。本文主要讲述jenkins的安装和运行。

namedlock阅读 646

给你的hexo添加live2D看板娘
《Live2D》是一种应用于电子游戏的绘图渲染技术,技术由日本Cybernoids公司开发。通过一系列的连续图像和人物建模来生成一种类似三维模型的二维图像,对于以动画风格为主的冒险游戏来说非常有用

遗失的美好灬阅读 594

建木v2.6.2发布
功能优化1、正在执行/挂起的流程实例超过1个,可一次性终止全部2、增加未登录用户不能查看资源的机制3、字符串类型的非必填参数,支持填写空内容4、增加API文档访问机制BUG修复1、任务挂起后重试,创建了两个任务...

建木阅读 475

封面图
用Typora,PicGo和OSS实现自动上传图片
后来改进为使用oss,把博客的图片都上传到oss上面。然后使用oss返回的图片url,这样我的文章里面的图片只上传了一次,最后把整篇文章的mardown复制到各个平台上,平台一般都会把markdown的文章中的img标签的图片...

我想问问天阅读 326

使用流水线插件实现持续集成、持续部署
流水线插件 是基于 Rainbond 插件体系 扩展实现,通过插件化的方式,可以实现对 Rainbond 构建体系的扩展。该插件由社区合作伙伴 拓维信息 参与开发并贡献,底层是基于 GitLab CI/CD 实现。

Rainbond1阅读 137

封面图
CI/CD | 如何管理Jenkins,一位产品经理的毕生所得
Jenkins在持续集成(CI)方面的强大力量和主导地位毋庸置疑——几乎所有人都在使用它来大规模地持续构建和测试软件。不过还有一点同样也无可争辩,可扩展性是它强大的基础,但无限的可能性会使其难以控制。

龙智DevSecOps阅读 250

封面图

fir.im是国内首家提供 App 测试托管分发服务的公司,提供两步发布测试应用的 fir.im, 崩溃分析 BugHD, ...

1.4k 声望
190 粉丝
宣传栏