解決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目錄)可能不在系統的環境變數中,會導致上述錯誤
配置完成後 點選構建 執行 藍色圓圈 構建完成
一個簡單的本地測試專案的就完成了