該文寫給愛折騰的人,對純新手不友善,沒有辣麼詳細地說明如何安裝node、git或者是hexo,因此關於這些問題可先行
使用hexo
而不使用jekyll
在github上搭blog最大的問題就是,每次提交都須要先hexo g
,而後再push
生成的文件們,這樣哪怕是改一個小的地方都須要從新編譯所有blog,想一想都蛋疼(雖然我尚未多少文章),因此決定使用Travis來自動持續集成提交到github之後的操做git
網上一搜有不少的教程,看了好多而後東拼西湊才最終成功,遂決定記錄下來最終成功的這個方法,以避免忘記github
本文中實現的最終效果是:web
寫完blog後,直接push
到github的source
分支,其它的就能夠不用管了npm
因爲個人.travis.yml
配置文件裏設置監聽的就是source
分支,因此會觸發webhook
緩存
Travis
則會將該項目clone
過去,而後按照.travis.yml
的設置執行接下來的命令ruby
執行完成後,再將編譯好的文件們發送到本身的服務器,順便push
回master
分支上來bash
這樣就能夠在blog.godi13.com和Godi13.github.io上都訪問blog了服務器
首先,按規定名稱XXXXX.github.io
,其中XXXXX
爲你的用戶名,以下圖中的Godi13.github.io
建立項目hexo
爲了使travis
可以將編譯好的文件們push
回我們的github,咱們須要生成token
,步驟以下:
1) 點擊右上方頭像,而後點setting
2) 點擊Personal access tokens
3) 點擊Generate new token
4) 爲token
起一個名字,勾選repo
,而後點擊生成
<div class="tip">生成token
之後,必定要複製好,由於只顯示一次,若是丟失只能再次生成了</div>
1) 使用github
賬號登陸Travis,右上方按鈕點擊同步項目,下方打開須要集成的項目,最後點擊齒輪進入項目配置頁面
2) 打開Build only if .travis.yml is present
,右下角的那個其實也能夠關了,而後往下移動頁面到環境變量
3) 在這裏我將變量名稱名爲REPO_TOKEN
,放上token
,點擊Add
按鈕
回到終端,進入blog
所在的文件夾下,新建.travis.yml
文件,並添加如下內容
# 使用語言 language: node_js # node版本 node_js: stable # 設置只監聽哪一個分支 branches: only: - source # 緩存,能夠節省集成的時間,這裏我用了yarn,若是不用能夠刪除 cache: apt: true yarn: true directories: - node_modules # tarvis生命週期執行順序詳見官網文檔 before_install: - git config --global user.name "Godi13" - git config --global user.email "mqzq9388@gmail.com" # 因爲使用了yarn,因此須要下載,如不用yarn這兩行能夠刪除 - curl -o- -L https://yarnpkg.com/install.sh | bash - export PATH=$HOME/.yarn/bin:$PATH - npm install -g hexo-cli install: # 不用yarn的話這裏改爲 npm i 便可 - yarn script: - hexo clean - hexo generate after_success: - cd ./public - git init - git add --all . - git commit -m "Travis CI Auto Builder" # 這裏的 REPO_TOKEN 即以前在 travis 項目的環境變量裏添加的 - git push --quiet --force https://$REPO_TOKEN@github.com/Godi13/Godi13.github.io.git master
而後,準備push
該項目到github,看下是否成功,若是是新項目可參照下面的git指令
git init # 添加本身的項目 git remote add origin git@github.com:Godi13/Godi13.github.io.git # 新建並切換分支 git checkout --orphan source git add -A git commit -m "Travis CI" git push
關於
--orphan
請參考 如何創建一個沒有 Parent 的獨立 Git branch
如最終成功則會看到
到這裏關於hexo和github的事情就先吿一段落,接下來就是服務器與tarvis
按照上面.tarvis.yml
的設置,其實我只須要在after_success
這個生命週期中,把public
文件夾下的全部文件傳送到服務器指定的路徑便可,接下來就是解決如何讓tarvis
往個人服務器傳東西的問題了
在此以前,你須要將本機生成的密鑰傳到服務器上
ssh-keygen -t rsa # 而後一路回車便可 # ssh-copy-id 可能須要另行安裝 # 若是ssh默認端口是22,則不須要 -p ssh-copy-id <登陸部署服務器用戶名>@<部署服務器地址> -p <部署服務器ssh端口> ssh <登陸部署服務器用戶名>@<部署服務器地址> -p <部署服務器ssh端口>
若是登陸服務器成功,接下來須要安裝travis
命令行工具
# 安裝travis命令行工具,如沒法使用gem指令須先安裝ruby gem install travis # --auto自動登陸github賬號 travis login --auto # 此處的--add參數表示自動添加腳本到.travis.yml文件中 travis encrypt-file ~/.ssh/id_rsa --add # 這個命令會自動把 id_rsa 加密傳送到 .git 指定的倉庫對應的 travis 中去
執行完之後會發如今travis
網站項目裏面的環境變量裏多了兩個參數
而且在.travis.yml
裏的before_install
週期中多了下面這2行
- openssl aes-256-cbc -K $encrypted_97d432d3ed20_key -iv $encrypted_97d432d3ed20_iv -in id_rsa.enc -out ~\/.ssh/id_rsa -d
默認生成的命令可能會在/
前面帶轉義符\
,咱們不須要這些轉義符,手動刪掉全部的轉義符,不然可能在後面引起莫名的錯誤
以後爲了保證命令的順利運行,咱們還須要正確地設置權限和認證
before_install - openssl aes-256-cbc -K $encrypted_97d432d3ed20_key -iv $encrypted_97d432d3ed20_iv -in id_rsa.enc -out ~/.ssh/id_rsa -d - chmod 600 ~/.ssh/id_rsa - echo -e "Host 主機IP地址\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
最後,就是在after_success
週期中,添加上傳服務器的指令便可,在這裏要注意,若是沒有stricthostkeychecking=no
參數,將構建失敗,詳細緣由請參考經過travis部署代碼到遠程服務器
# 因爲我修改了默認的port,因此在這裏也進行了加密處理 - scp -o stricthostkeychecking=no -P $PORT -r public/* 用戶@域名:/路徑
但使用scp
有不少問題,因此後來我決定改用rsync
命令,缺點是端口號就不能用travis環境來加密了,若是哪一個朋友有更好的方案但願能告訴我
# public 後面加上/便可將該目錄下的文件都傳送到服務器了 - rsync -rv --delete -e 'ssh -o stricthostkeychecking=no -p 端口號' public/ 用戶@域名:/路徑
最後在這裏放上我最終的.travis.yml配置參數,但願本文對你們能有所幫助,若是以爲不錯記得點贊~ 若是能告訴我爲何以爲我寫的還不錯就更好了,我就知道該怎麼再接再礪了,謝謝你們的支持~~~~