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, 若是同分支又會進入到死循環,同分支部署慎用

詳見官方文檔

相關文章
相關標籤/搜索