使用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用戶下進行的,其餘環境自行處理或轉換
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,
而後打開http://服務器的ip:8080/jenkins,根據知識安裝jenkins環境,安裝推薦環境便可,不須要本身選擇,由於推薦環境已經包含了咱們須要的插件。若是要nginx反向代理tomcat,推薦先作完後面nginx的反向代理再安裝jenkins。
按照提示輸入password,而後選擇推薦安裝:
正在安裝,要等一下
帳號密碼以及權限的事自行考慮
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地位也不算低,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須要配置好,否則後面可能沒法跳轉到對的路徑。
點擊create new jobs,選擇freestyle,填好job名字。
建立了job之後,jenkins緊接着就是讓你配置jenkins,若是此次不配置也沒什麼,由於建立的job已經保存好了。
若是我在github上的代碼庫是私密的而不是公開的,那麼jenkins想要拉取到個人代碼必需要有相應的私鑰。至於哪一臺機上的公鑰私鑰沒什麼所謂,重要的是github上有一臺機的公鑰,而jenkins上應該也有這臺機的私鑰。固然前提是github上的代碼庫是私密的,公開的無所謂。
先在Jenkins添加私鑰。
查出private key往上填就行,爲了保密我就不填真實username了。至於怎麼生成key,自行查找ssh-keygen命令,或者參考相似Github的文檔。
配置webhook是在github上完成的。webhook的存在乎義就是github上發生了特定事件,而後會告訴請求jenkins,以便讓jenkins去拉代碼進行下一步操做。
例如,如今要配置的,就是每次將代碼push上去後,就觸發jenkins的操做。
打碼處理。
以前的環境都搭建好了,配置剛纔建立的job就是關鍵的一步了。
首先是要配置github project
而在源碼管理裏面,必需要填一個可行的、同時有權限的配置,失敗則以下圖,必須作到沒有錯誤提醒
browser也順便一填
而在Build Triggers裏面必需要選Github hook trigger,勾選了jenkins纔會接受github發來的請求
最後在Build,也就是構建的這部分,也填上,推薦使用shell,畢竟如今玩這些都是linux了
選擇shell後,能夠在文本框裏面填本身部署要用到的命令,以下面的例子,cd、刪除、拷貝等命令均可以。
須要注意的是,某些命令沒有,這個能夠經過不斷的測試來檢驗。
至此已經配置好了jenkins上的job,接下來就是調試了。
調試很簡單。先把代碼clone下來本地,而後稍稍改動一個無關文件,再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 :
沒毛病。
如有錯誤之處請指出,更多地關注煎魚。