在从前,我在本地写一篇文章后要将它不熟到服务器并且提交源码,需要这么几个步骤:

1
2
3
4
$ hexo clean && hexo deploy // 我的博客是用hexo构建的,其他的静态博客构件工具还有jekyll等
$ git add .
$ git commit -m "xxxx"
$ git push origin source // 保存博客源码

这里主要做了两个操作,而这两个操作又是 捆绑 的,什么意思呢?就是每次写一篇文章我 都要 在本地执行进行部署,并且提交源码,这是很费劲的。

我可不可以像代码开发一样,在本地写完代码,然后提交代码,就这么结束了?当然可以了!

下面开始一步一步的讲解,过程虽然有些繁琐,但是记住这种事情只要做一次,正可谓功在当代,利在千秋啊!

持续集成(CI)

来到新公司,接触到了持续集成(CI)的概念,提供 CI 的开源工具有 Jenkins,但是我总不能自己跑个机器来运行 Jenkins 对我的博客源码变化进行监控吧?那么,就想到了有没有开源、免费的、提供 CI 功能的在线工具服务呢?当然有,Travis CI 是目前比较火的开源持续集成构建工具,而且它对github的集成支持非常好。

怎么自动部署

那么,具体是怎么个自动部署法?这是时序图:

自动部署是时序图

  1. 创建文章;
  2. 将代码 push 到远程仓库,这里是 Github;
  3. Github 调用 Travis 的 webhook,关于什么是 webhook,这里不具体说明了,大体上就是一个链接,Travis 在 Github 上配置以后,Github 每发生一些事件(就比如我这里的 push)就会掉用访问这个链接以起到通知 Travis 的作用
  4. Travis 从 github 获取代码;
  5. Travis build 代码;
  6. Travis 部署博客到 Coding.net。

可以看到,在本地只需要执行两步操作,剩下的我完全不用管。

最右边的 Coding.net 是我用来部署博客的,它是类似 Github 的代码托管,并且也提供 pages 的服务,最关键的一点是它是中国本地的。最开始我部署在 Github 上,但是由于国内访问实在太慢而且不稳定,所以就选择了 Coding.net

下一篇将会着重讲 Travis CI 的配置和使用,在这之前先得注册 Travis CI 和安装一个 Travis 官方提供的命令行工具 Travis CI Command Line Client,它可以快捷地使用一些功能,比如生成 Travis 的加密文件等。

注册 Travis CI

Travis CI 不需要单独注册,直接使用 GitHub 账号登录就可以了。

上官网会发现有 Sign in with GitHub(使用GitHUb登录)和 Sign Up(注册),其实这俩做的事情都一样,就是用 GitHub 账号登录。

登录后界面会显示你的 GitHub repository,默认全部全部没有勾选(“叉号”),选择你的博客的 repository(使之变成“对号”) 后完成第一步,如图:

注册Travis CI

接下来是添加配置文件 .travis.yml 和 进行第一次 push 代码触发工作,这两部再下一篇再讲。

安装 Travis CI Command Line Client

以下的安装教程是我直接翻译的官方安装说明

请确保本地已经安装Ruby,并且版本不低于1.9.3,推荐2.0.0版。

可以通过执行以下命令验证 Ruby 的版本:

1
2
$ ruby -v
ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-darwin12.3.0]

然后执行:

1
$ gem install travis -v 1.8.2 --no-rdoc --no-ri

最后验证一下是否安装成功:

1
2
$ travis version
1.8.2

如上,如果出现 1.8.2 这样的版本信息,则说明 Travis CI Command Line Client 安装成功。之后进行登录,执行:

1
$ travis login

按照提示依次输入用户名、密码,Two-factor码(如果你有设置的话),以下是登录成功的反馈:

1
2
3
4
5
6
7
8
9
10
11
$ travis login
We need your GitHub login to identify you.
This information will not be sent to Travis CI, only to api.github.com.
The password will not be displayed.

Try running with --github-token or --auto if you don't want to enter your password anyway.

Username: henryhuang
Password for henryhuang: *************
Two-factor authentication code for henryhuang: 403317
Successfully logged in as henryhuang!

使用 gem 需要安装 ruby 环境,作为一个开发人员,不要嫌麻烦。

未完待续,还有第二篇。