1. 程式人生 > >解決Jenkins自動構建nodejs專案無法完成的問題

解決Jenkins自動構建nodejs專案無法完成的問題

最近添置伺服器 之前只有一個的時候使用比較原始的方式 

就是1 手動ftp上傳檔案 

2 ps -ef|grep node* 找到在後臺執行的node專案 kill這個程序

3 進入專案目錄 nohup npm start &啟動

這樣重複的工作在數量少的情況下沒感覺什麼。一旦要幾臺伺服器做負載均衡的時候,就顯得比較繁瑣了。

於是開始嘗試用jenkins自動構建

測試環境 Jenkins+JDK8+win10  nodejs5.0.0  SVN1.8

網上這方面的資料比較少,主要是這麼奇葩的搭配可憐

Jenkins本身是Java編寫的對maven有支援,不過我這邊是node沒啥卵用。

網上隨便搜了一篇教程跟著寫踩了幾個坑記下來防止再坑

前面一切正常,新建job選擇了自由風格 就是第一項。

問題1:

因為是Windows系統 增加構建步驟的時候不要選擇 execute shell,而應該選擇execute Windows batch Command 小問題

問題2:

在execute Windows batch Command 寫入

cd mytest
npm start  (express4.0模組的啟動命令)

然後構建執行  問題來了 根本停不下來啊,服務完全啟動了但就是不報構建成功。(一直是紅色圓圈)

進控制檯看log 一切正常 各種請求都能響應。

這應該是jenkins判斷任務完成的機制的問題。百度了半天未果

然後找了半天在介面上發現了這個

翻譯結果

為建設專案執行一個視窗批處理指令碼。該指令碼將以當前目錄的工作區作為執行。你在文字框中輸入的文字將作為一個批處理檔案執行,並將被認為是失敗如果在執行%errorlevel%不是0。
如果在供應鏈管理中已經有一個批處理檔案,可以在批處理檔案中鍵入路徑(相對於工作區目錄),並且簡單地執行。

問題一下子明白了 輸入的命令的返回結果不是0

在cmd中輸入echo %errorlevel% 就能列印錯誤碼了

關於命令的返回碼 可以參考這篇文章http://blog.chinaunix.net/uid-10347480-id-3263127.html 點選開啟連結

繼續輸入npm start後發現 因為是在Windows上前臺啟動這時候如果無法列印輸出 %errorlevel% 控制檯在列印log狀態,是不是可以認為是沒有返回呢?或者說沒有返回0?

於是考慮轉為後臺啟動,Windows上後臺啟動就無法使用nohup了。而且nohup的啟動方式關閉時也不方便用統一的指令碼重啟。

這就是node這邊程式碼的問題了,想著乾脆一步到位把守護程序也加上吧 找到了forever和pm2這兩個模組。測試之後(使用環境為centos)發現pm2的似乎功能能強大一點,比較遺憾的是Windows上使用pm2有些問題,無法正常啟動,於是改成用forever 

npm install forever -g 全域性安裝

forever命令無法接npm start了 只好用 forever start bin/www的形式  這裡注意不要進入bin目錄去 start www 因為node中如果使用相對路徑 可能會把根目錄對應到啟動位置,而預設的npm start的啟動位置是bin那一級,可能會出現讀不到對應資源的情況

於是

execute Windows batch Command中的內容變成了這樣

cd mytest
forever start bin/www

這裡有個問題是可能會報錯forever 不是內部命令

這是由於Jenkins使用系統環境變數而不是某個使用者的環境變數,forever命令所在的目錄(就是npm目錄)可能不在系統的環境變數中,會導致上述錯誤

配置完成後 點選構建 執行 藍色圓圈  構建完成

一個簡單的本地測試專案的就完成了