由于最近写了一个react加golang版本的一个项目,需要部署到腾讯云服务器上,由于每次手动到服务器上执行命令 拉取代码实在是效率太低,所以就研究下怎么能够自动拉取代码的方案。
总的部署思路分两种:
- 编译后的文件部署
- 源码部署
编译后的文件部署,就是先在本地进行npm run build
打包,生成 build 文件夹,然后将 build 文件夹传到服务器,再用 Nginx 配置一个静态解析即可。
这种方案用 rsync 直接上传就可以,这里不赘述。
源码部署就是把源文件上传到服务器上,然后:
$ npm install && npm run build
这种方式是利用github的webhokks来实现,当我i们提交代码push的时候,或者合并代码时,通过触发不同钩子去git pull代码.
nginx部署
server{
listen 80
server_name xxxx
location {
root xxxxx
proxy_pass htpps:127.0.0.1:3000
}
}
编写执行shell脚本
通过判断传入的项目是否存在来确认是执行git clone 还是 git pull,如果需要切换到对应的分支拉取代码,可以再加上git checkout xxxx 切换到对应的分支
#!/bin/bash
echo "/data/home/git/$1"
url = "/data/home/git/$1"
if [ ! -f $url ];then
echo "文件不存在"
cd /data/home/git/
git clone "$2"
else
echo '$1'
cd /data/home/git/"$1"
git pull
fi
利用node编写执行shell脚本接口
当提交代码时触发对应的接口,利用child_process模块执行shell脚本拉取对应的项目的代码
const exec = require('child_process').exec;
exec(cmdStr, option, function (err, stdout, stderr) {
if (err) {
console.log('get weather api error:' + stderr);
} else {
console.log("更新代码成功")
}
});