Travis CI 实现自动备份Segmentfault文章到Github

上一篇简单介绍了 Travis CI, 这里再简单介绍一个应用,利用Travis CI的Cron Jobs功能,实现自动备份segmentfault文章到Github。php

第一步:抓取文章内容html

Segmentfault 很是友好的为每一个专栏提供了一个RSS,咱们很方便就能够抓取到文章内容,稍作转化就能够了,省略不写,详见代码git

第二步:配置 SSH keysgithub

Github 上有详细的说明,省略不写,敬请查看shell

clipboard.png

第三步:编写.travis.yml 配置segmentfault

咱们采用git命令行提交commits的方式备份文章。windows

要实现自动提交,须要把私钥也和代码一块儿上传,可是私钥泄漏至关于放弃了仓库的全部权,因此须要对私钥进行加密。(这是个比较麻烦的方法,可是实际上开发中咱们部署代码到本身的服务器经常使用的也是 ssh 远程操做,有借鉴意义)ruby

1.安装 travis服务器

咱们经过 Ruby 的 gem 包管理器来安装 travis, 若是未安装 Ruby,先下载最新版本,并安装它,而后执行以下命令确认 gem 是否安装成功markdown

gem -v

可以正常列出版本号,表示安装成功

由于众所周知不可说的缘由,在安装包时,使用官方源地址会很是慢。咱们切换成国内的镜像

gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/ # 老版本 Ruby 这里会证书相关的错误,因此确认安装了最新版本

gem sources -l #确保列出的源地址只有镜像地址

准备工做作好了,咱们执行以下命令安装

gem install travis

2.登陆 Travis CI

travis login --auto

执行命令,根据提示输入 github 的用户名和密码。

这里有个坑,window 用 cmd 操做时死活很差使,若是你在输入密码时显示的明文,那么恭喜你也踩坑了,你能够改用 power shell 来操做,不事后面仍是会遇到一些莫名其妙的问题,建议在 *inux 环境下操做,哪怕是虚拟机也行。

3.填加私钥

执行以下命令

travis encrypt-file ~/.ssh/id_rsa --add

实际使用中颇有可能会报错

Can't figure out GitHub repo name. Ensure you're in the repo directory, or specify the repo name via the -r option (e.g. travis <command> -r <owner>/<repo>)

这个的意思是找不到仓库,须要指定,能够这么操做

travis encrypt-file -r actors315/actors315.github.io ~/.ssh/id_rsa --add

执行完成后,在 .travis.yml 文件中会自动填加以下代码

openssl aes-256-cbc -K $encrypted_xxxxxx_key -iv $encrypted_xxxxxxx_iv -in .travis/id_rsa.enc -out ~/.ssh/id_rsa -d

并生成一个 id_rsa.enc 文件,你能够手动移到合适的目录,并调整上面命令文件的位置

并在 Travis CI Setting 页面会看到增长了以下两个变量

clipboard.png

若是在 windows 下生成的文件,travis-ci 构建时极可能会报这个错。

0.02s$ openssl aes-256-cbc -K $encrypted_2805aa35fedb_key -iv $encrypted_2805aa35fedb_iv -in .travis/id_rsa.enc -out ~/.ssh/id_rsa -d
bad decrypt

4.编写配置

.travis.yml 增长以下配置,详细见源码

# 配置环境
before_install:
  # 替换为刚才生成的解密信息
  - openssl aes-256-cbc -K $encrypted_79258127fb87_key -iv $encrypted_79258127fb87_iv -in .travis/id_rsa.enc -out ~/.ssh/id_rsa -d
  # 改变文件权限
  - chmod 600 ~/.ssh/id_rsa
  # 配置 ssh
  - eval "$(ssh-agent -s)"
  - ssh-add ~/.ssh/id_rsa
  - cp .travis/ssh_config ~/.ssh/config
  # 配置 git 替换为本身的信息
  - git config --global user.name 'actors315'
  - git config --global user.email actors315@gmail.com
  # 用 ssh 方法提交
  - git remote set-url origin git@github.com:actors315/actors315.github.io.git
  # 切换到提交的目的分支
  - git checkout master

install:
  - composer install --prefer-dist --optimize-autoloader --quiet

script:
  - php -f bin/console.php

after_success:
  - git add README.md
  - git add ./markdown/*
  - git add ./files/*
  # 这里很重要,commit message 必定要填加 [skip travis] , 否则可能会进入死循环,一直在提交一直在自动构建
  - git commit -m "[skip travis] auto build by travis-ci" 
  - git push origin master

第四步:填加 Cron jobs

最后一步,配置完后就能够自动跑了。有三个时间周期可供选择,每个月、每周、天天,按需选择就行了

clipboard.png

这样就大功告成了,天天自动跑一次

clipboard.png

其余方法

1.使用 Personal access tokens 实现

这也是 git 命令行自动提交,使用 Personal access tokens 也很方便,也是推荐。

2.使用 Travis CI 官方推荐的 deploy 流程

若是你须要自动提交的分支和自动构建不是同一个分支,这就很是方便了,你只须要生成一个 Personal access tokens ,在.travis.yml 文件中简单增长一点配置就行了。

deploy:
  provider: pages
  skip-cleanup: true
  github-token: $GITHUB_ACCESS_TOKEN
  target-branch: gh-pages
  keep-history: true
  on:
    branch: master

这个方式尚未研究出来是否可能指定 commit message, 若是同分支又会进入到死循环,同分支部署慎用

详见官方文档

相关文章
相关标签/搜索