Gist & Cookbook ...

小目标:每天能够提交一行代码 ...

使用travis-ci來自動部署本博客

吴亮's Avatar 2019-08-10

  1. 1. 原理
    1. 1.1. 和travis-ci的服務器構建一個免ssh密碼的環境
    2. 1.2. 其他兩處小細節
  2. 2. 完整的.travis.yml
  3. 3. 參考

travis-ci是一款持續集成工具,它可以很好地和github結合。簡單來說,當我們有代碼push到github上時,travis-ci會自動啓動虛擬機,然後pull代碼,執行指定的命令。

在本文中,將介紹如何使用travis-ci來自動部署本博客。

原理

原理其實很簡單,無非在travis-ci被觸發構建任務後,執行一下編譯操作,然後再scp到服務器上。

但問題就是,我怎麼能夠和travis-ci的测试机構建一個免ssh密碼的環境,因爲一來我不可能直接和travis-ci的测试机建立一個免密的環境,二來如果把我服務器的密碼暴露出來那就跪了。

和travis-ci的服務器構建一個免ssh密碼的環境

travis-ci支持對ssh密鑰進行加密,不過加密密鑰需要安裝travis這個包。

1
2
gem install travis
travis login

在輸入了帳號和密碼登錄成功後,下面我們使用travis encrypt-file來加密

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

自行完上面這段命令後,或生成一段解密命令並自動添加到了.travis.yml中:

1
2
3
before_install:
- openssl aes-256-cbc -K $encrypted_9b6c99d9f0dc_key -iv $encrypted_9b6c99d9f0dc_iv
- in id_rsa.enc -out ~/.ssh/id_rsa -d

另外,在上述的這款命令中,它也會生成id_rsa.enc這個對id_rsa加密後的文件,你需要把這個id_rsa.enc加入到你的github倉庫中。

其他兩處小細節

除了上述這個核心環節外,還有兩處小細節需要我們修改一下

  • 降低id_rsa文件的权限,否则ssh处于安全方面的原因会拒绝读取秘钥
  • 将生产服务器地址加入到测试机的信任列表中,否则连接时会询问是否信任服务器

最終,我們的==.travis.yml==是張這個樣子的:

1
2
3
4
5
before_install:
- openssl aes-256-cbc -K $encrypted_9b6c99d9f0dc_key -iv $encrypted_9b6c99d9f0dc_iv
-in id_rsa.enc -out ~/.ssh/id_rsa -d
- chmod 600 ~/.ssh/id_rsa
- echo -e "Host proxy.wuliang.me\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config

完整的.travis.yml

剩餘的就比較簡單了,無非是指定是什麼環境、如何打包、如何同步什麼的了,我們最終的==.travis.yml==如下:

1
2
3
4
5
6
7
8
9
10
11
12
language: node_js
node_js:
- "10.16.2"
before_install:
- openssl aes-256-cbc -K $encrypted_9b6c99d9f0dc_key -iv $encrypted_9b6c99d9f0dc_iv
-in id_rsa.enc -out ~/.ssh/id_rsa -d
- chmod 600 ~/.ssh/id_rsa
- echo -e "Host proxy.wuliang.me\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
script:
- npm run build
after_success:
- hexo deploy

最終,我們比較爽了,現在我只要安心push文章就可以了,再也不用手動同步了。

參考

本文作者 : 吴亮
本文使用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议
本文链接 : https://www.wuliang.me/deploy-blog-with-travis-ci/

本文最后更新于 天前,文中所描述的信息可能已发生改变