實踐案例丨教你一鍵構建部署發布前端和Node.js服務


如何使用華為雲服務一鍵構建部署發布前端和Node.js服務

構建部署,一直是一個很繁瑣的過程

作為開發,最害怕遇到版本發布,特別是前、后端一起上線發布,項目又特別多的時候。

例如你有10個項目,前后端都要同時發布,那么就需要多次合並代碼、構建,重復很多動作..而且還要去關心構建機器環境是不是變了?配置是否能扛住同時構建多個應用?人為的操作次數多了,就很難保證萬無一失。

那這種局面怎么破? 是不是要考慮從技術角度來提效? 假如我把所有的構建、發布都遷移到雲端,可以一鍵push代碼,然后自動完成構建,我只要執行一個命令就可以完成部署,又不需要關心機器配置和環境變化,那我們的工作效率是不是可以大大提升?

我之前的構建發布流程

之前我是使用Travis CI和gitHub以及docker-compose結合進行一鍵代碼push構建發布。

但是有一個很明顯的問題,gitHub和Travis這兩個平台是完全獨立的,特別是我代碼托管在gitHub上,有時候訪問速度還很慢,更要命的是沒有在一個平台上形成完整的鏈路閉環。

於是我找了很多個平台,最終發現,華為雲可以滿足我的需求,既可以代碼托管,也有可配置的自動化構建流程,而且訪問速度快,純中文界面友好。

新建項目 & 遷移到華為雲

像我們前端和Node.js都是有一些腳手架,例如React這種框架,就有很多腳手架可以一鍵生成項目模板,讓你不再關心工程化配置的問題,華為雲的developer模塊也提供了這個功能。

選擇想要的模板。像我選擇的是React+express模板,10秒鍾左右就生成好了,此時就可以在我的模板產物中看。

此時下載壓縮包,解壓運行以下命令即可開始開發

npm run install-all
npm run dev

新建項目時候,我們可以選擇上面這種模式快速根據模版生成代碼,但是我今天是要把我的代碼從gitHub遷移到華為雲上托管,然后在華為雲上完成整個開發流程的閉環。

將我gitHub倉庫代碼導入到華為雲托管

進入華為雲devcloud模塊,輸入想要導入的gitHub倉庫地址和賬號密碼(如果需要),然后開始導入,大約耗時30S。

此時,在本地生成git ssh,將公鑰放置到華為雲上。

我們此時可以點擊代碼倉庫,進去就可以看到倉庫詳情了(純中文界面,真的友好)。

在本地使用以下命令即可完成clone和啟動

git clone remoteurl
cd your projectName
npm install 
npm run dev

以上完成了代碼遷移,目前我們代碼已經托管到華為雲上。為了完成整套研發環節的閉環,我們需要將構建、發布都遷移到華為雲鯤鵬服務器上。

改變我的構建策略

我之前是基於gitHub和Travis CI和docker-compose完成一鍵push代碼,然后一鍵完成發布,現在要在華為雲上實現一套自動化構建流程。

構建策略適配難度極低,遠超我的想象

我的項目是一個前端基於React,后端基於Node.js的express框架,跟華為雲的devstar的模板非常像。

如何設計這個任務流?

編寫任務流

基於項目,新建編譯構建任務。

編寫任務流任務流,所謂任務流,就是完成一個,然后接着下一個。華為雲這里比較貼心,根據不同的環境進行了區分環境,不像傳統的服務器,你還要去裝docker、node.js等等這些(PS:任務新建后可以修改任務~)。

這里默認使用了華為的鏡像源倉庫,解決了因為環境配置問題導致下載慢的問題~

如何編寫任務流?

以我的一個資料網站項目為例子,基於docker-compose發布,前后端都打包在一個鏡像中。

首先代碼push后,構建任務不一定需要馬上執行,而且我的推送次數可能很頻繁,此時我可以調成定時任務,還能限制次數(真的很貼心)。

編寫dockerfile

此時先編寫dockerfile文件,用於docker,基於Node.js 12.16.3版本的鏡像,指定端口

#引用鏡像
FROM node:12.16.3
#執行命令,創建文件夾
RUN mkdir -p /usr/www
WORKDIR /usr/www
COPY . /usr/www
RUN npm run build 
#配置環境變量
 ENV HOST 0.0.0.0
 ENV PORT 8080
#定義程序默認端口
EXPOSE 8080
#運行程序命令
CMD ["node","./server/index.js"]

此時可以想象,我們推送代碼后(可以選擇什么分支),根據配置定時自動構建,然后可以通過接口或者手動借助docker-compose命令進行一鍵更新發布。

簡單三個命令,完成docker-image的制作和push(具體參數可以參考提示)。

首先登陸docker,然后build打包鏡像,最后push即可完成構建這一步,我們本地完全是無感知的~也不需要考慮配置和環境的問題。

此時我們手動觸發構建任務(像我們公司項目特別大,一台4核8G的機器可能就扛不住幾個項目同時構建,在這里就不用擔心)。

等待一段時間后,發現命令執行完成,docker鏡像已經發布完成。

發布

兩種手段

  • 通過ssh連接華為雲服務器,執行編寫好的docker-compose文件
  • 通過接口帶token方式(有權限的人才可以發布)調用,執行docker-compose命令,達到發布目的

我們重點關注第一種,通過ssh連接到華為雲鯤鵬服務器。

輸入用戶和ip地址后,ssh連接成功,編寫docker-compose文件。

version: "3.7"
services:
    redis:
        image: redis:3
        container_name: redis
        hostname: redis
        command: redis-server /usr/local/etc/redis/redis.conf --requirepass huaweiapp666
        volumes:
          - ./redis/redis.conf:/usr/local/etc/redis/redis.conf
        ports:
          - "6379:6379"
    huaweiapp:
        image: jinjietan/huaweiapp:latest
        ports:
            - "8080:8080"
        restart: on-failure

執行命令,拉取鏡像

 docker-compose pull

拉取完成后,運行docker-compose

docker-compose up -d 

啟動成功,輸入域名,即可訪問到我的網站了。完成這個遷移和整套開發構建流程的閉,僅僅用了1個小時不到。

感受

華為雲從開發者角度出來,項目模板一鍵生成,定時構建任務,任務流的定制化處理這些,非常人性化,大大降低了開發運維門檻,形成整套研發構建流程的閉環。

我司也正在准備購買遷移華為雲產品,所有托管、構建發布都放在雲端完成閉環。

相信你通過這篇文章,也可以快速的將你的代碼托管、構建發布快速遷移到華為雲鯤鵬服務器上。

 

點擊關注,第一時間了解華為雲新鮮技術~


免責聲明!

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



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