1. 程式人生 > 實用技巧 >使用Travis CI 自動部署Hexo 之後續維護

使用Travis CI 自動部署Hexo 之後續維護

簡介

前幾天寫了一篇{% post_link Windows環境安裝MongoDB Windows環境安裝MongoDB %} 文章,在個人網站上https://jobbym.github.io/ 發現沒有自動部署,於是去查找了一下原因。

將這次處理過程記錄下來,為後續的維護留下線索。下面是之前利用Travis CI 自動部署Hexo 到GitHub Pages 時,自己記錄的相關文章。

準備環境

由於時全新的Windows 10 系統的電腦,部署環境需要重新搭建

  1. Windows 10 系統
  2. Git
  3. Nodejs

處理過程

首先登入到Travis CI 上檢視錯誤原因

31.62s$ hexo g
INFO  Start processing
INFO  Files loaded in 8.31 s
ERROR Asset render failed: css/main.css
/home/travis/build/JobbyM/JobbyM.github.io/node_modules/stylus/node_modules/mkdirp/lib/opts-arg.js:7
    opts = { mode: 0o777, fs, ...opts }
                              ^^^
SyntaxError: Unexpected token ...
    at createScript (vm.js:56:10)
    at Object.runInThisContext (vm.js:97:10)

一、看到這個問題首先時懷疑專案依賴的問題,需要更新依賴

使用npm-check 來檢查npm依賴包是否有更新,錯誤以及不在使用的,我們也可以使用npm-check進行包的更新 安裝npm-check:

npm install -g npm-check

檢查npm包的狀態:

npm-check -u -g

二、部署之後,Travis CI 仍然有問題

Warning: Permanently added the RSA host key for IP address '140.82.113.4' to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

提示沒有許可權進行部署,查看了一下https://github.com/JobbyM/JobbyM.github.io/settings/keys 沒有相關的Deploy Key,可能是自己不小心刪除了,所以重新需要生成一個。 使用ssh-keygen 製作SSH Key,供GitHub 當作Deploy key 使用

ssh-keygen -t rsa -C "[email protected]"

三、Deploy key 重新生成了,那麼需要重新加密相應的Private Key。

之前{% post_link continuous-deployment-to-github-with-travis 利用Travis CI 自動部署Hexo 到GitHub Pages 上 %} 是使用在Windows 上安裝Ubuntu 虛擬機器進行處理的,現在可以使用Windows10 訪問Ubuntu 子系統(WSL)來進行處理。

四、安裝完Ubuntu 需要做的第一件事,就是換源。

  1. 備份原始原始檔sources.list
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
  1. 編輯原始檔sources.list
sudo vi /etc/apt/sources.list
  1. 將官方源http://archive.ubuntu.com/ubuntu/ 替換為阿里源http://mirrors.aliyun.com/ubuntu/
:%s/archive.ubuntu/mirrrors.aliyun/g
  1. 之後執行儲存命令
:wq
  1. 修改完軟體源後,更新軟體列表和軟體
sudo apt update
sudo apt upgrade

五、之後安裝travis

  1. 需要安裝ruby ruby-dev 來通過gem 安裝travis
sudo apt-get install ruby
sudo apt-get install ruby-dev
  1. ruby 也需要換源 檢視源列表
gem sources -l
  1. 更新源
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
  1. 更新源的快取
gem sources -u
  1. 安裝travis
sudo gem install travis
  1. 提示錯誤

六、需要搭建C/C++編譯開發環境

  1. 安裝gcc
sudo apt-get install gcc
  1. 安裝g++
sudo apt-get install g++
  1. 需要安裝make
sudo apt-get install make
  1. 之後再安裝travis 就成功了

七、之後就是使用Travis

  1. 使用命令工具登入Travis
jobbym@ubuntu:~/learn/blog/.travis$ travis login --auto
  1. Trivas 將前面生成的Private key 的檔案id_rsa, 加密生成id_rsa.enc, 並自動在.travis.yml 的before_install 中,自動插入解密指令,-r 選項用來指定repos 名稱
jobbym@ubuntu:~/learn/blog/.travis$ travis encrypt-file id_rsa --add -r JobbyM/blog
  1. ** 注意** 這裡應該將JobbyM/blog 修改為JobbyM/JobbyM.github.io,否則在自動部署時候,會提示如下錯誤
0.01s$ openssl aes-256-cbc -K $encrypted_f217180e22ee_key -iv $encrypted_f217180e22ee_iv -in .travis/id_rsa.enc -out ~/.ssh/id_rsa -d
iv undefined
The command "openssl aes-256-cbc -K $encrypted_f217180e22ee_key -iv $encrypted_f217180e22ee_iv -in .travis/id_rsa.enc -out ~/.ssh/id_rsa -d" failed and exited with 1 during .

八、之後再次進行部署

  1. 提示瞭如下錯誤
$ hexo algolia
FATAL Something's wrong. Maybe you can find the solution here: https://hexo.io/docs/troubleshooting.html
AlgoliaSearchError: Please provide an API key. Usage: algoliasearch(applicationID, apiKey, opts)
    at AlgoliaSearchNodeJS.AlgoliaSearchCore 

2. 大概是說缺少API key,查看了文件http://theme-next.iissnan.com/third-party-services.html#algolia-search,提示需要將Search-Only API key 設定為環境變數

$ export HEXO_ALGOLIA_INDEXING_KEY=Search-Only API key
$ hexo algolia
  1. 修改_config.yml 為如下
# Algolia
algolia:
  applicationID: 'SV57WJ53OS'
  indexName: 'jobbymsblog'
  chunkSize: 5000

4. 修改.travis.yml ,在before_install 之前設定環境變數

before_install:
- export HEXO_ALGOLIA_INDEXING_KEY=$hexo_aloglia

5. 在https://www.travis-ci.org/github/JobbyM/JobbyM.github.io/settings 這裡進行新增一個變數hexo_aloglia 6. 這個變數的值為Admin API Key 的值,而不是Search-Only API Key 的值。在https://www.algolia.com/apps/SV57WJ53OS/api-keys/all 在這裡進行檢視相關值 7. 使用Search-Only API Key 會提示如下錯誤資訊, 沒有許可權去更新物件

$ hexo algolia
INFO  [hexo-algolia] Testing HEXO_ALGOLIA_INDEXING_KEY permissions.
INFO  Start processing
INFO  [hexo-algolia] 191 records to index (post, page).
INFO  [hexo-algolia] Indexing chunk 1 of 4 (50 records)
ERROR [hexo-algolia] Not enough rights to update an object near line:1 column:1539
INFO  [hexo-algolia] Indexing chunk 2 of 4 (50 records)

九、更新之後會跳轉到http://zouzeir.xyz/ 域名,需要將source/CNAME 檔案內容清空,同時重新重新整理瀏覽器

參考文件

  1. Ubuntu 18.04 下搭建 C/C++編譯開發環境及GCC多版本切換
  2. Windows10訪問Ubuntu子系統(WSL)的桌面環境