(ssh2-sftp-client 和 ssh2)前端项目自动打包部署

ssh2+node 

在vue的项目平级下创建deploy.js

const cp=require('child_process')
//此包ssh2需要下载
const ssh2=require('ssh2')

//执行tar.sh脚本获取输出流
let pro=cp.exec('"./tar.sh"',(error)=>{
    if (error) {
        console.log(error)
    }
})

pro.stdout.pipe(process.stdout)
pro.on('exit',()=>{
//打包完成后上传
    // 上传
    connect()
})
let conn=new ssh2.Client();

// 上传操作
function connect() {
    conn.on('ready',()=>{
       conn.sftp((err,sftp)=>{
           sftp.fastPut('./vue项目/dist.tar.gz','/服务器暂存地址projectV/dist.tar.gz',{},(err,result)=>{
           //上传完成后开始解压
            Shell(conn)
           })
       })
    }).connect({
        host:'服务器IP',
        port:'默认22',
        username:'用户名root',
        password:'密码'
    })
}

// 解压部署操作
function Shell(conn) {
    conn.shell((err,stream)=>{
        stream.end(
            `
             cd /projectV
             mv ../www/wwwroot/vuedist bak/vuedist.$(date "+%Y%m%d%H%M%")
             tar zxvf dist.tar.gz
             mv dist ../www/wwwroot/vuedist
             rm -rf dist.tar.gz
             exit
            `
            //进入服务器暂存地址
            //上传前先备份原始项目
            //解压上传的压缩包
            //移动解压后的文件到发布目录
            //删除压缩包
            //退出
        ).on('data',data=>{
            console.log(data.toString())
        }).on('close',()=>{
            conn.end()
        })
    })
}

2.创建tar.sh与刚刚创建的js平级
cd ycboke
npm run build
tar zcvf dist.tar.gz dist
#打包和压缩的操作


3.执行deploy.js
node deploy.js

4.检查服务器是否有新的上传

利用 ssh2-sftp-client 实现测试环境前端自动部署脚本

let Client = require('ssh2-sftp-client');
const path = require('path')
const glob = require('glob')
let sftp = new Client();
const localPath = path.join(__dirname, '../dist').replace(/\\/g, '/')
const remotePath = '/data/dist'
sftp.connect({
    host: '*****',
    port: 22,
    username: '*****',
    password: '*****'
}).then(() => {
    console.log('连接成功');
    console.log('删除static');
    return sftp.rmdir(`${remotePath}`, true)
}).then(async () => {
    console.log('删除static成功');
    console.log('创建static中js,css,img,fonts文件');
    await sftp.mkdir(`${remotePath}`, true)
    await sftp.mkdir(`${remotePath}/static`, true)
    await sftp.mkdir(`${remotePath}/static/css`, true)
    await sftp.mkdir(`${remotePath}/static/img`, true)
    await sftp.mkdir(`${remotePath}/static/fonts`, true)
    await sftp.mkdir(`${remotePath}/static/js`, true)
}).then(() => {
    console.log('创建static中js,css,img,fonts文件成功');

    const fileLiat = glob.sync(`${localPath}/**/*.{js,css,png,eot,woff,ttf,html}`)
    return Promise.all(
        fileLiat.map(file => {
            console.log(file);
            const remoteFile = file.replace(localPath, remotePath)
            return sftp.fastPut(file, remoteFile)
        })
    )
}).then(() => {
    console.log('成功');
    sftp.end()
}).catch((err) => {
    console.log(err.message, 'catch error');
    sftp.end()
});


package.json里面添加:
 "buildDev-test": "node build/build.js test && node config/upload.js"

最后执行:npm run buildDev-test



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值