前端如何利用git实现CI/CD

135 阅读1分钟

由于最近写了一个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.13000
     }
 }

编写执行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("更新代码成功")
    }
 });