上一篇簡單介紹了 Travis CI, 這裏再簡單介紹一個應用,利用Travis CI的Cron Jobs功能,實現自動備份segmentfault文章到Github。php
第一步:抓取文章內容html
Segmentfault 很是友好的爲每一個專欄提供了一個RSS,咱們很方便就能夠抓取到文章內容,稍作轉化就能夠了,省略不寫,詳見代碼git
第二步:配置 SSH keysgithub
Github 上有詳細的說明,省略不寫,敬請查看shell
第三步:編寫.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 頁面會看到增長了以下兩個變量
若是在 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
最後一步,配置完後就能夠自動跑了。有三個時間週期可供選擇,每個月、每週、天天,按需選擇就行了
這樣就大功告成了,天天自動跑一次
其餘方法
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, 若是同分支又會進入到死循環,同分支部署慎用
詳見官方文檔