Vue-CLI 3 scp2自动部署项目至服务器的方法
一安装scp2
npminstallscp2--save-dev
二、配置测试/生产环境服务器SSH远程登陆账号信息
在项目根目录下,创建.env.dev文件(测试环境变量)
VUE_APP_SERVER_ID变量表示当前需部署的测试服务器ID为0
//.env.dev文件中 VUE_APP_SERVER_ID=0
在项目根目录下,创建.env.prod文件(生产环境变量)
VUE_APP_SERVER_ID变量表示当前需部署的生产服务器ID为1
//.env.prod文件中 VUE_APP_SERVER_ID=1
在项目根目录下,创建yirenck/products.js文件
/*
*读取env环境变量
*/
constfs=require('fs');
constpath=require('path');
//env文件判断打包环境指定对应的服务器id
constenvfile=process.env.NODE_ENV==='prod'?'../.env.prod':'../.env.dev';
//env环境变量的路径
constenvPath=path.resolve(__dirname,envfile);
//env对象
constenvObj=parse(fs.readFileSync(envPath,'utf8'));
constSERVER_ID=parseInt(envObj['VUE_APP_SERVER_ID']);
functionparse(src){
//解析KEY=VAL的文件
constres={};
src.split('\n').forEach(line=>{
//matching"KEY'and'VAL'in'KEY=VAL'
//eslint-disable-next-lineno-useless-escape
constkeyValueArr=line.match(/^\s*([\w\.\-]+)\s*=\s*(.*)?\s*$/);
//matched?
if(keyValueArr!=null){
constkey=keyValueArr[1];
letvalue=keyValueArr[2]||'';
//expandnewlinesinquotedvalues
constlen=value?value.length:0;
if(len>0&&value.charAt(0)==='"'&&value.charAt(len-1)==='"'){
value=value.replace(/\\n/gm,'\n');
}
//removeanysurroundingquotesandextraspaces
value=value.replace(/(^['"]|['"]$)/g,'').trim();
res[key]=value;
}
});
returnres;
}
/*
*定义多个服务器账号及根据SERVER_ID导出当前环境服务器账号
*/
constSERVER_LIST=[
{
id:0,
name:'A-生产环境',
domain:'www.prod.com',//域名可以忽略
host:'46.106.38.24',//ip
port:22,//端口
username:'root',//登录服务器的账号
password:'Rock@sz18!',//登录服务器的账号
path:'/mdm/nginx/dist'//发布至静态服务器的项目路径
},
{
id:1,
name:'B-测试环境',
domain:'test.xxx.com',
host:'XX.XX.XX.XX',
port:22,
username:'root',
password:'xxxxxxx',
path:'/usr/local/www/xxx_program_test/'
}
];
module.exports=SERVER_LIST[SERVER_ID];
三、使用scp2库,创建自动化部署脚本
在项目根目录下,创建yirenck/index.js文件
//yirenck/index.js里面
constscpClient=require('scp2');
constora=require('ora');
constchalk=require('chalk');
constserver=require('./products');
constspinner=ora(
'正在发布到'+
(process.env.NODE_ENV==='prod'?'生产':'测试')+
'服务器...'
);
varClient=require('ssh2').Client;
varconn=newClient();
conn
.on('ready',function(){
//rm删除dist文件,\n是换行换行执行重启nginx命令我这里是用docker重启nginx
conn.exec('rm-rf/opt/nginx_fdfs/manager\ndockerrestartnginx',function(
err,
stream
){
if(err)throwerr;
stream
.on('close',function(code,signal){
//在执行shell命令后,把开始上传部署项目代码放到这里面
spinner.start();
scpClient.scp(
'./dist',
{
host:server.host,
port:server.port,
username:server.username,
password:server.password,
path:server.path
},
function(err){
spinner.stop();
if(err){
console.log(chalk.red('发布失败.\n'));
throwerr;
}else{
console.log(
chalk.green(
'Success!成功发布到'+
(process.env.NODE_ENV==='prod'
?'生产'
:'测试')+
'服务器!\n'
)
);
}
}
);
conn.end();
})
.on('data',function(data){
console.log('STDOUT:'+data);
})
.stderr.on('data',function(data){
console.log('STDERR:'+data);
});
});
})
.connect({
host:server.host,
port:server.port,
username:server.username,
password:server.password
//privateKey:require('fs').readFileSync('/home/admin/.ssh/id_dsa')
});
四、安装cross-env判断生产环境还是测试环境
这里用到了cross_env,cross-env能跨平台地设置及使用环境变量,这里用来设置是生产环境还是测试环境
npmi--save-devcross-envcross-env
五、添加package.json中的scripts命令,自定义名称为"yirenck"
发布到测试环境命令为npmrunyirenck:dev,生产环境为npmrunyirenck:prod
"scripts":{
"serve":"vue-cli-serviceserve--modedev",
"build":"vue-cli-servicebuild--modeprod",
"yirenck:dev":"npmrunbuild&&cross-envNODE_ENV=devnode./yirenck",
"yirenck:prod":"npmrunbuild&&cross-envNODE_ENV=prodnode./yirenck",
},
到此这篇关于Vue-CLI3scp2自动部署项目至服务器的方法的文章就介绍到这了,更多相关Vue-CLI3scp2自动部署内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!