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