配置服務(wù)器文件
項目根目錄創(chuàng)建文件 .env.dev 文件 (測試環(huán)境變量)和創(chuàng)建 .env.prod 文件 (生產(chǎn)環(huán)境變量)
VUE_APP_SERVER_ID=0
VUE_APP_SERVER_ID=1
創(chuàng)建scp2自動化部署腳本
項目根目錄創(chuàng)建 deploy/index.js 文件
// deploy/index.js里面
const scpClient = require('scp2');
const ora = require('ora');
const chalk = require('chalk');
const server = require('./products');
const spinner = ora(
????? '正在發(fā)布到' +
? ? (process.env.NODE_ENV === 'prod' ? '生產(chǎn)' : '測試') +
? ? '服務(wù)器...'
);
var Client = require('ssh2').Client;
var conn = new Client();
conn.on('ready', function(){
? ? // rm 刪除dist文件,\n 是換行 換行執(zhí)行 重啟nginx命令 我這里是用docker重啟nginx? ??
????conn.exec('rm -rf /mdm/nginx/dist\ndocker restart nginx', function(? ? ? err,
? ? ? stream
? ? ){
? ? ? if (err) throw err;
? ? ? stream
? ? ? ? .on('close', function(code, signal){
? ? ? ? ? // 在執(zhí)行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('發(fā)布失敗.\n'));
? ? ? ? ? ? ? ? throw err;
? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? console.log(
? ? ? ? ? ? ? ? ? chalk.green(
? ? ? ? ? ? ? ? ? ? 'Success! 成功發(fā)布到' +
? ? ? ? ? ? ? ? ? ? ? (process.env.NODE_ENV === 'prod'? ? ? ? ? ? ? ? ? ? ? ? ? '生產(chǎn)'? ? ? ? ? ? ? ? ? ? ? ? : '測試') +
? ? ? ? ? ? ? ? ? ? ? '服務(wù)器! \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')?
?});
package.json 配置 scripts 命令, 定義名稱為 “deploy”
"scripts": {
? ? "serve": "vue-cli-service serve --mode dev",
? ? "build": "vue-cli-service build --mode prod",
? ? "deploy:dev": "npm run build && cross-env NODE_ENV=dev node ./deploy",
? ? "deploy:prod": "npm run build && cross-env NODE_ENV=prod node ./deploy",
? },
原文:https://www.cnblogs.com/ajaemp/p/12034739.html