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

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

第一步:抓取文章内容

Segmentfault 非常友好的为每个专栏提供了一个RSS,我们很方便就可以抓取到文章内容,稍做转化就可以了,省略不写,详见代码

第二步:配置 SSH keys

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

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

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

要实现自动提交,需要把私钥也和代码一起上传,但是私钥泄漏相当于放弃了仓库的所有权,所以需要对私钥进行加密。(这是个比较麻烦的方法,但是实际上开发中我们部署代码到自己的服务器常用的也是 ssh 远程操作,有借鉴意义)

1.安装 travis

我们通过 Ruby 的 gem 包管理器来安装 travis, 如果未安装 Ruby,先下载最新版本,并安装它,然后执行如下命令确认 gem 是否安装成功

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 -r /)

这个的意思是找不到仓库,需要指定,可以这么操作

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 页面会看到增加了如下两个变量

如果在 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 [email protected]
  # 用 ssh 方法提交
  - git remote set-url origin [email protected]: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

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

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

其他方法

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, 如果同分支又会进入到死循环,同分支部署慎用

详见官方文档

你可能感兴趣的:(持续集成,travis-ci)