阿里雲持續集成實踐

以前項目部署都是ssh登錄到服務器,手動執行更新代碼、關閉已啓動的應用實例、啓動應用實例。若是有多臺機器的話,效率上就有點偏低了。後來發現阿里雲有CodePipeline產品,能夠用來作持續集成。配置好後,在web界面裏點一下就能一鍵部署,甚至部署到多臺機器。過程當中也遇到了一些問題,現記錄下。node

問題1

首先是項目依賴bcrypt,這個包構建依賴於python,但nodejs的構建機環境是沒有python的。解決方式是本身提供pythonpython

wget https://www.python.org/ftp/python/2.7.15/Python-2.7.15.tar.xz
tar -xf Python-2.7.15.tar.xz
export PATH=$PATH:$WORKSPACE/Python-2.7.15/bin
npm install
rm Python-2.7.15.tar.xz
rm -rf Python-2.7.15
複製代碼

下載python蠻費時間的,我最後選擇把python壓縮文件包加到倉庫裏。git

問題2

CodePipeline整個流程是這樣的,先在構建機構建,完成後上傳到oss,最後下載構建好的項目到目標機器上部署。npm install安裝是在構建階段執行的,會symlink包的執行文件到node_modules/.bin下,可是在目標機器部署時,symlink就失效了。因此執行npm scripts時就會報錯。github

解決方式有兩種,首先是直接執行node_modules下包的js文件web

"scripts": {
    "start": "EGG_SERVER_ENV=prod egg-scripts start --daemon --title=egg-server-lvcaixin-user",
    "startCI": "EGG_SERVER_ENV=prod node ./node_modules/egg-scripts/bin/egg-scripts.js start --daemon --title=egg-server-lvcaixin-user"
  }
複製代碼

固然這樣就須要爲持續集成新增一個命令。npm

還有種方式是從新生成node_modules/.bin下的文件。bash

看了下npm的相關文檔,發現npm build會在npm install以後執行,作一些link相關的工做,恰好解決上門的問題,當時實際在背後作這事的是bin-links服務器

npm build node_modules/egg-scripts
npm run stop
npm run start
複製代碼

問題3

在部署階段執行的腳本,是不會影響CodePipeline做業的構建狀態,也就是說部署階段的腳本出錯了,CodePipeline做業的構建狀態仍是成功的。ssh

這個顯然是不符合常理的,我也特地提工單,問了下工做人員。工做人員回覆說是異步執行的技術緣由,須要進一步的排期。異步

相關文章
相關標籤/搜索