思路:
1、從github上拉取代碼到服務器指定目錄(git clone 代碼倉庫地址),
2、進入到 服務器指定目錄/倉庫目錄 執行依賴安裝(例 npm install),
3、根據安裝依賴的結果,成功則執行打包編譯(例 npm run build),
4、根據編譯結果,執行部署的操作(例 scp myfile username@192.168.1.100:/home)
開坑:
在危險邊緣試探~
一開始為了測試遠程執行命令,做了比較簡單的試探
直接把倉庫先拷到服務器了,然后調接口用nodejs的exec去執行命令
這里踩了一個坑,就是exec()無法執行‘cd 目錄名’的命令,原因如下
Yes, cd
is not supported by exec
. This is because exec
spawns a child-process, and child-processes cannot change their parent's cwd. For example, exec('cd baz; myCommand');
would change the cwd for myCommand
, but not for node.
然后找到了解決辦法,要去看nodejs關於進程的文檔
Each command is executed in a separate shell, so the first cd
only affects that shell process which then terminates. If you want to run git
in a particular directory, just have Node set the path for you:
exec('git status', {cwd: '/home/ubuntu/distro'}, /* ... */);
cwd
(current working directory) is one of many options available for exec
.
目前為止,已經弄明白如何進行代碼拉取、打包編譯、自動部署
但想要做一個完整的構建部署系統,還需要支持可查看的打包編譯以及部署記錄,需要可以回滾到之前的打包版本的功能雲雲
為了支持快速回滾,那么系統盤里應適當保存最近的打包(比如說三天以內),所以也要考慮壓縮問題,解/壓縮的過程中,也需要考慮到負責打包的機子內存的問題