svn同时提交到两台服务器上,该怎么做?

       最近在做前端项目时,出现一个问题,我想在服务端跑项目,但是呢,运维说svn仓库那台服务器(服务器A)我无权限操作,但可以申请一台新的服务器(服务器B)给我跑vue项目,于是就有了这个需求:svn同时提交到两台服务器AB上,同步代码。刚开始 绞尽脑汁去想怎么做到,甚至想到了用svn 的生命钩子,或者是基于node,先在服务器B上装git仓库,然后在本地执行一行命令,svn提交代码至服务器A上,也git提交代码至服务器B上,貌似是个解决问题的办法,但是还是有些繁琐。最终被我想到了更好的办法。

    需求细化,首先在服务器B上只是为了跑项目,那么我们是不会直接在服务器B上改代码的,我的办法就是直接在服务器B上装svn,然后在服务器B山像本地一样将服务器A中svn仓库的代码拉过去,这样只要在服务器B上每次执行svn up就可以了,但实际情况是我们不能每次都手动远程连接服务器B执行svn up,显然是不合适的。怎么办呢?很简单,在本地项目中用npm安装ssh2,每次执行一行命令,然后实现在将代码提交到服务器A 上的同时,远程连接服务器B,同时执行svn up,代码如下:

let Client = require('ssh2').Client;
let conn = new Client();
let conf = require('./projectConfig');
let exec = require('child_process').execSync;


svnOrder();
// 更新dev服务器的代码
function devUpdate() {
  conn.on('ready', () => {
    console.log('Client :: ready');
    conn.exec('svn up /usr/local/html/fd2020/mobile', (err, steam) => {
      if (err) {
        console.log('dev 代码上传错误:', err)
      } else {
        console.log('dev代码更新成功');
      }
      process.exit();
    })
  }).connect({
    host: '10.0.29.****',
    port: 22,
    username: '****',
    password: '****'
  });
}
// 执行svn 相关命令并做相应操作
function svnOrder() {
  let str0 = execOrder('svn up');
  let str = execOrder(`svn commit -m "上传${conf.projectName}项目到dev, version:${conf.version}"`);
  if (str.indexOf('Committed') > -1) {
    console.log('svn 代码提交成功!');
    devUpdate(str0 + str);
    return true;
  } else if (str.indexOf('in conflict') > -1) {
    console.log('svn 提交时代码有冲突, 请手动解决');
  } else if (!str) {
    console.log('svn 暂无可提交代码');
    devUpdate(str0);
    return true;
  } else {
    console.log('svn 提交时出现问题, 请手动解决');
  }
  return false;
}
// 执行系统命令
function execOrder(order) {
  let log = exec(order);
  let buffer = Buffer.from(log);
  console.log(buffer.toString());
  return buffer.toString();
}

说了一大堆其实原理很简单,换种思路想想就好了。有不清楚的可以私聊我哦 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值