如何使用華為雲服務一鍵構建部署發布前端和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個小時不到。

感受
華為雲從開發者角度出來,項目模板一鍵生成,定時構建任務,任務流的定制化處理這些,非常人性化,大大降低了開發運維門檻,形成整套研發構建流程的閉環。
我司也正在准備購買遷移華為雲產品,所有托管、構建發布都放在雲端完成閉環。
相信你通過這篇文章,也可以快速的將你的代碼托管、構建發布快速遷移到華為雲鯤鵬服務器上。
