Jenkins 構建 Exec timeout!

利用 Jenkins 作自動化構建是方便又省時的,只需簡單的配置就可以完成先後端項目的部署。前端

一、報錯提示:node

ERROR: Exception when publishing, exception message [Exec timed out or was interrupted after 120,004 ms]
複製代碼

二、報錯緣由git

參考博客npm

使用 Jenkins 作部署任務時,之前端項目舉例,通常會有以下幾個步驟:後端

  • 一、 從 git 相應的分支拉取代碼
  • 二、安裝項目的三方依賴包 (npm install or cnpm install or yarn install)
  • 三、項目代碼測試或生產環境編譯構建 (npm run build or cnpm run build)
  • 四、啓動項目的服務 (這裏通常是 node server

其中的第 二、3 步是比較耗時的。這裏主要由於第 3 步的構建時間徹底有可能超過 Jenkins 設置的構建時間(120000 ms),致使 Jenkins 構建超時而中斷。測試

咱們再看看 Jenkins 的默認配置ui

每一個構建步驟在沒有作手動設置的狀況下默認是 120000 ms 的超時時間。一旦相應的構建步驟超時,構建就會中斷並拋出以下錯誤信息。spa

ERROR: Exception when publishing, exception message [Exec timed out or was interrupted after 120,004 ms]
複製代碼

三、解決方案日誌

在可能超時的構建步驟那裏設置 Exec timeout(ms) 合理的時間,以防止構建步驟超時,同時勾選上 Exec in pty 讓控制檯及時輸出相關日誌信息。code

四、問題擴展

命令解析 cd deploy/merc && ls | grep -v node_modules | xargs rm -r

首頁將命令分段

  • 一、cd deploy/merc 將當前目錄指向 deploy/merc
  • 二、ls | grep -v node_modules 查找目錄下除 node_modules 外的目錄或文件
  • 三、ls | grep -v node_modules | xargs rm -r 查找並刪除目錄下除 node_modules 外的目錄或文件

若是第二步目錄或文件篩選不到,那麼第三步的刪除操做就不能執行,因此會報以下錯誤信息

cd deploy/merc && ls | grep -v node_modules | xargs rm -r
rm: missing operand    //操做對象不存在
Try `rm --help' for more information. 複製代碼

第二行報錯:操做對象不存在。

這個命令的主要目的是:在 Jenkins 構建項目以前,會從配置的 git 地址拉取最新的代碼,爲了保證每次部署的代碼都是最新的。那又爲何要排除 node_modules 目錄呢?node_modules 是項目的第三方依賴包,文件下載比較大且很慢,爲了保證每次的項目構建時間,因此保留了這個目錄。這個命令也是非必要的,問題的解決方案就是先不執行這個命令,而後 build 一次,再添加這條命令就沒問題。

相關文章
相關標籤/搜索