[小題大作] Github + Jenkins 實現自動化部署 hexo 博客靜態文件

使用jenkins來部署hexo簡直就是小題大作,可是偶爾這樣小題大作還真有折騰的樂趣html

背景

jianyujianyu.com以前是使用typecho作博客的。java

緣由很簡單,wordpress過重,hexo很輕沒錯,但是這個沒有後臺管理(據說能夠折騰成有後臺管理的),每次寫完博客都要deploy一下的hexo,我真心要不起。node

而如今jianyujianyu.com是hexo了,通過也很簡單,就是由於CA證書過時了,換證書的時候弄砸了,本着順便過濾一波辣雞博客的心思,從新弄,此次選擇了hexo,不爲何,人生的選擇就是這麼奇妙。linux

那怎麼不本身手寫一個?說得好!不過我纔不要。nginx

用hexo不是不行,是要考慮deploy的事,或者,我換臺電腦寫博客,我沒有這個hexo的node環境,我也不想登陸服務器用着vim來寫,好比我如今就安靜在公司電腦上寫博客。在這樣的狀況下,怎麼deploy呢?在從前,wordpress和typecho有着後臺管理,這個問題根本是不存在的。git

想着想着,一拍腦殼,就直接用jenkins了,而後把代碼放在github,包括hexo的整個文件夾。至於爲啥用github而不用coding甚至是github pages,never mind。github

設計的deploy過程很簡單:web

  • 我先clone了github上的hexo文件夾,添加了md文章,而後pushshell

  • github整理好代碼就通知jenkins:我這裏資源更新了,大爺快來玩啊apache

  • jenkins收到消息,獸性大發地下了github上的代碼

  • 擁有hexo環境的jenkins直接執行hexo g,產生了分泌物,也就是靜態文件,在這裏就是jianyujianyu.com的html網頁內容(hexo/public)

  • 待定的nginx直接將用戶請求拉向jianyujianyu.com的hexo/public文件夾便可

簡單地設計完,即是動手開始。

<!-- more -->

環境準備

全部操做都是在Ubuntu的root用戶下進行的,其餘環境自行處理或轉換

Java、Tomcat和Jenkins

jenkins是java的美好產物,爲了後面調試起來簡單,使用tomcat容器來裝着這產物,而不是直接用apt下載。

(若是爲了快捷,也能夠只下載java和jenkins,而後經過java -jar jenkins.war來運行。不推薦。)

所以咱們首先安裝J8。

add-apt-repository ppa:webupd8team/java
apt update
apt install oracle-java8-installer

以後是安裝tomcat。對應着J8,選tomcat8。先去tomcat官網下載包,而後解壓。

wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.0.43/bin/apache-tomcat-8.0.43.tar.gz
tar zxvf apache-tomcat-8.0.43.tar.gz

接着是上jenkins官網下載jenkins的war包。

wget http://ftp-chi.osuosl.org/pub/jenkins/war-stable/2.46.1/jenkins.war

war包就放在tomcat文件夾的webapps下便可。

而後啓動tomcat,進入tomcat文件夾的bin下,啓動:

./startup.sh

接下來就能夠嘗試經過網頁登陸tomcat以及jenkins了。在瀏覽器中打開http://服務器的ip:8080,

tomcat主頁

而後打開http://服務器的ip:8080/jenkins,根據知識安裝jenkins環境,安裝推薦環境便可,不須要本身選擇,由於推薦環境已經包含了咱們須要的插件。若是要nginx反向代理tomcat,推薦先作完後面nginx的反向代理再安裝jenkins

按照提示輸入password,而後選擇推薦安裝:

正在安裝,要等一下

帳號密碼以及權限的事自行考慮

Nodejs、NPM和hexo

hexo是nodejs的產物,所以搭建nodejs環境是必須的。而安裝nodejs推薦在官網上下載源碼編譯,否則apt獲得的都是舊的,沒辦法,node這兩年發展得太快了。

wget https://nodejs.org/dist/v6.10.2/node-v6.10.2.tar.gz
tar zxvf node-v6.10.2.tar.gz
cd node-v6.10.2
./configure
make
make install

make可自行經過參數-j來加速編譯。

安裝好了node,npm也接着來了,若是在安裝過程當中以爲npm下載太慢能夠是用淘寶鏡像,使用方法自行查詢。

而後照着hexo官方文檔的方法安裝hexo已經相關環境

npm install hexo-cli -g
hexo init hexo
cd hexo
npm install

hexo的命令很簡單,有了hexo的環境以後能夠經過命令生成靜態文件或者啓動臨時服務器:

hexo g # generate static file
hexo s # start a server

在生成靜態文件後,將nginx配置到hexo/public下面,請求便可到達;在啓動hexo臨時服務器後,便可訪問http://服務器的ip:4000/jenkins。

至此,hexo環境已是完成了。

若是說還有什麼須要在這一步作的話, 那應該就是將代碼push到git上,這個事我就很少說了。

Nginx

安裝nginx十分簡單,可是在此次的實驗中,nginx地位也不算低,80或者443端口要配置到hexo/public下,最好還要給tomcat配置反向代理。在之後的安全和優化方面,nginx須要配置的也很多。

安裝nginx也就一句

apt install nginx

而後即是對配置的修改(我直接改default配置文件,別的方法自行實施)

vim /etc/nginx/sites-available/default

在開放80或者443的端口的server裏面配置好root,例:

root /var/www/hexo/public;

推薦給tomcat上個反向代理,

upstream tomcat  {
        server  127.0.0.1:8080;
}

server {
        listen 11111;
        listen [::]:11111;

        location / {
                #try_files $uri $uri/ =404;
                proxy_pass   http://tomcat;
                proxy_redirect  off;
                proxy_set_header Host $host:$server_port;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Request-Url $request_uri;
        }
}

以上須要注意的是proxy_set_header須要配置好,否則後面可能沒法跳轉到對的路徑。

配置Github和Jenkins

建立job

建立job

點擊create new jobs,選擇freestyle,填好job名字。

選擇freestyle

建立了job之後,jenkins緊接着就是讓你配置jenkins,若是此次不配置也沒什麼,由於建立的job已經保存好了。

配置密鑰

若是我在github上的代碼庫是私密的而不是公開的,那麼jenkins想要拉取到個人代碼必需要有相應的私鑰。至於哪一臺機上的公鑰私鑰沒什麼所謂,重要的是github上有一臺機的公鑰,而jenkins上應該也有這臺機的私鑰。固然前提是github上的代碼庫是私密的,公開的無所謂。

先在Jenkins添加私鑰。

建立一個證書

填入git平臺的公鑰對應的私鑰

查出private key往上填就行,爲了保密我就不填真實username了。至於怎麼生成key,自行查找ssh-keygen命令,或者參考相似Github的文檔

配置WebHook

配置webhook是在github上完成的。webhook的存在乎義就是github上發生了特定事件,而後會告訴請求jenkins,以便讓jenkins去拉代碼進行下一步操做。

例如,如今要配置的,就是每次將代碼push上去後,就觸發jenkins的操做。

打碼處理。

配置job

以前的環境都搭建好了,配置剛纔建立的job就是關鍵的一步了。

首先是要配置github project

而在源碼管理裏面,必需要填一個可行的、同時有權限的配置,失敗則以下圖,必須作到沒有錯誤提醒

browser也順便一填

而在Build Triggers裏面必需要選Github hook trigger,勾選了jenkins纔會接受github發來的請求

最後在Build,也就是構建的這部分,也填上,推薦使用shell,畢竟如今玩這些都是linux了

選擇shell後,能夠在文本框裏面填本身部署要用到的命令,以下面的例子,cd、刪除、拷貝等命令均可以。

須要注意的是,某些命令沒有,這個能夠經過不斷的測試來檢驗。

至此已經配置好了jenkins上的job,接下來就是調試了。

調試

調試很簡單。先把代碼clone下來本地,而後稍稍改動一個無關文件,再push,以後即是感覺是否這套環境是否能自動化部署。

Push代碼

各類push方式任君選擇

查看日誌

push成功後,github hook會通知所填寫的jenkins,若是jenkins沒有調起job,則有多是hook或者配置job裏面的Github hook trigger沒有填寫正確。

若是是成功調起,在jenkins的hexo的job頁面,左下角會看到有相似#1

想要查看錯誤日誌,點擊左上角的Github Hook Log或者Console Output,便可根據這些日誌對配置進行調整。

Output大體都以下:

訪問網站

不是紅燈通常都是成功的,訪問網站體驗一下,jianyujianyu.com

沒毛病。

如有錯誤之處請指出,更多地關注煎魚

相關文章
相關標籤/搜索