node實現自動化部署;


node實現自動化部署;

說明:由於本人做的前端,Java就不太會,但是node確實一個對於前端同學寫后端代碼的一個非常好的技術。個人的項目前端是vue寫的后端是Nodejs,同時利用jenkjins實現前后端自動化部署。

1、項目上傳;

前端項目這里就不在概括,以下內容都是node部署內容;注:Node項目寫完之后,不需要打包,直接把源碼上傳到你的遠程服務器就可以了,我的服務器用的是阿里雲Liunx服務器,下文提到的服務器皆為阿里雲服務器。

  1. 把你的Node項目進行打包。(node_modules文件不要打包)。
  2. 登錄你的服務器,然后新建一個文件夾。
  3. 把你的node代碼上傳到你的新建文件夾中。
  4. 把你的上傳的Node項目解壓縮到你的新建文件夾中。

2、jenkins實現半自動化;

為什么這里說是半自動化,因為實現了push拉取代碼;但是Node並不會自動啟動

  1. 登錄你的jenkins並新建立一個項目。

  2. 配置你的jenkins的shell命令。

  3. 具體的jenkins的git配置請查看我的另外一騙文章,傳送門。

  4. 我的jenkins配置文件;

    #!/bin/bash
    cd /var/lib/jenkins/workspace/herolist #進入Jenkins工作空間下herolist項目目錄
    tar -zcvf heroList.tar.gz * #把生成的項目打包成壓縮包,方便移動到項目部署目錄
    cd /www/herolist # 進入node項目根目錄
    mv /var/lib/jenkins/workspace/heroList/heroList.tar.gz ./  # 移動剛剛打包好的項目到web項目根目錄
    tar -zxvf heroList.tar.gz  # 解壓項目到本目錄
    rm -rf heroList.tar.gz # 刪除壓縮包
    npm install # 安裝項目中的依賴
    # npm run dev # 項目啟動。
    

    注意:當我們做到這里時,基本就算搞定了,但是還缺少重要的一步,就是node服務啟動。

    當一切都感覺完好時,卻發現最后一行node服務啟動報錯,不過我沒解決掉,具體的報錯原因是:Error: Cannot find module 'express'我的操作是在Liunx手動npm run dev運行是完好的,但是帶來了另一個問題,遠程服務不能關閉,不然Node就掛了,在網上找了不少方法可以使用,nohup npm run dev >myout.file 2>&1 & 持續運行node並把信息輸出到指定的文件中,這樣啟動的Node服務就不會因為你退出終端而停止了。

    但是另一個問題便是,你用jjenkins進行新的構建時,node並不會重啟,來加載你的新代碼看下文pm2解決

3、jenkins + node + pm2實現自動化;

條件:

  • 已完成jenkins和git的配置,
  • 已經可以成功部署實現自動化;

1、安裝pm2

npm install pm2 -g

測試;出現以下類似列表說明安裝成功;

[root@iZbp156pkpio44mis76wmxZ herolist]# pm2 list
┌─────┬────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id  │ name   │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
├─────┼────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0   │ npm    │ default     │ N/A     │ fork    │ 0        │ 0      │ 30   │ stopped   │ 0%       │ 0b       │ root     │ disabled │
└─────┴────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
[root@iZbp156pkpio44mis76wmxZ herolist]# cd /

2、使用;

# 在你的Jenkins的項目配置文件的shell命令中在最后一行加上:
pm2 restart npm -- run dev # 重啟nodejs

3、測試

[root@iZbp156pkpio44mis76wmxZ herolist]# ps -ef | grep node 
root      8981  6550  0 22:29 pts/0    00:00:00 grep --color=auto node # node啟動前
[root@iZbp156pkpio44mis76wmxZ herolist]# ps -ef | grep node 
root      9101  9088  0 22:29 ?        00:00:00 sh -c export NODE_ENV=production && node app.js
root      9102  9101  3 22:29 ?        00:00:00 node app.js # node啟動后
root      9126  6550  0 22:30 pts/0    00:00:00 grep --color=auto node
[root@iZbp156pkpio44mis76wmxZ herolist]# 

4、常見pm2命令介紹傳送門

到此自動化部署結束;

4、問題;

  1. jenkins執行pm2命令報錯;pm2: command not found

    一般情況下,如果我們全局安裝了的話,在window上不會出現,但是liunx上好像不行,需要我們自己手動建立軟連接,類似與window創建的環境變量。部分用戶可能安裝上 連基礎的命令也不能使用,也是需要建立軟連接的;

    ......以上省略!
    [heroList] $ /bin/sh -xe /tmp/jenkins4753469389532234169.sh
    [heroList] $ /bin/sh -xe /tmp/jenkins259913818346979744.sh
    + pm2 start npm -- run dev
    /tmp/jenkins259913818346979744.sh: line 6: pm2: command not found
    Build step 'Execute shell' marked build as failure
    Finished: FAILURE
    

    解決:

    # 找到pm2的安裝根目錄;我的:/home/local/mynode/node-v12.18.2-linux-x64/bin/pm2
    [root@iZbp156pkpio44mis76wmxZ herolist]# npm install -g pm2 
    npm WARN deprecated debug@4.1.1: Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)
    /home/local/mynode/node-v12.18.2-linux-x64/bin/pm2 -> /home/local/mynode/node-v12.18.2-linux-x64/lib/node_modules/pm2/bin/pm2
    /home/local/mynode/node-v12.18.2-linux-x64/bin/pm2-dev -> /home/local/mynode/node-v12.18.2-linux-x64/lib/node_modules/pm2/bin/pm2-dev
    /home/local/mynode/node-v12.18.2-linux-x64/bin/pm2-docker -> /home/local/mynode/node-v12.18.2-linux-x64/lib/node_modules/pm2/bin/pm2-docker
    /home/local/mynode/node-v12.18.2-linux-x64/bin/pm2-runtime -> /home/local/mynode/node-v12.18.2-linux-x64/lib/node_modules/pm2/bin/pm2-runtime
    npm WARN ws@7.2.5 requires a peer of bufferutil@^4.0.1 but none is installed. You must install peer dependencies yourself.
    npm WARN ws@7.2.5 requires a peer of utf-8-validate@^5.0.2 but none is installed. You must install peer dependencies yourself.
    npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@2.3.1 (node_modules/pm2/node_modules/fsevents):
    npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.3.1: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
    
    + pm2@4.5.1
    added 195 packages from 195 contributors in 9.346s
    [root@iZbp156pkpio44mis76wmxZ herolist]# 
    # 找到環境變量路徑 %PATH; 
    [root@iZbp156pkpio44mis76wmxZ /]# echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/home/local/JDK/jdk1.8.0_251/bin:/home/local/mynode/node-v12.18.2-linux-x64/bin:/home/local/maven/apache-maven-3.6.3/bin:/root/bin
    [root@iZbp156pkpio44mis76wmxZ /]#
    # 建立軟連接;
    [root@iZbp156pkpio44mis76wmxZ /]# ln -s /home/local/mynode/node-v12.18.2-linux-x64/bin/pm2 /usr/local/bin/
    

    注意:第一次建立軟連接后,我並沒有解決 pm2: command not found。需要 /usr/local/bin/ 改為 /usr/bin/

    完整命令:ln -s /home/local/mynode/node-v12.18.2-linux-x64/bin/pm2 /usr/bin/

  2. 測試;jenkins控制台輸出日志;

    ......以上省略!
    [heroList] $ /bin/sh -xe /tmp/jenkins4043641238157935034.sh
    [heroList] $ /bin/sh -xe /tmp/jenkins4997403699140616984.sh
    + pm2 start npm -- run dev
    [PM2] Applying action restartProcessId on app [npm](ids: [ 0 ])
    [PM2] [npm](0) ✓
    [PM2] Process successfully started
    ┌─────┬────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
    │ id  │ name   │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
    ├─────┼────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
    │ 0   │ npm    │ default     │ N/A     │ fork    │ 10506    │ 0s     │ 30   │ online    │ 0%       │ 3.5mb    │ root     │ disabled │
    └─────┴────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
    Finished: SUCCESS
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM