zoukankan      html  css  js  c++  java
  • scp2自动部署

    安装scp2

    npm install scp2 --save-dev
    

    配置服务器文件

    项目根目录创建文件 .env.dev 文件 (测试环境变量)和创建 .env.prod 文件 (生产环境变量)

    VUE_APP_SERVER_ID=0
    VUE_APP_SERVER_ID=1
    

    创建scp2自动化部署脚本

    项目根目录创建 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(
      '正在发布到' +
        (process.env.NODE_ENV === 'prod' ? '生产' : '测试') +
        '服务器...'
    );
    
    var Client = require('ssh2').Client;
    
    var conn = new Client();
    conn
      .on('ready', function() {
        // rm 删除dist文件,
     是换行 换行执行 重启nginx命令 我这里是用docker重启nginx
        conn.exec('rm -rf /mdm/nginx/dist
    docker restart nginx', function(
          err,
          stream
        ) {
          if (err) throw err;
          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('发布失败.
    '));
                    throw err;
                  } else {
                    console.log(
                      chalk.green(
                        'Success! 成功发布到' +
                          (process.env.NODE_ENV === 'prod'
                            ? '生产'
                            : '测试') +
                          '服务器! 
    '
                      )
                    );
                  }
                }
              );
    
              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",
      },
    
  • 相关阅读:
    Ionic移动应用框架
    JavaScript为iphone添加到主屏幕
    移动前端:在手机上隐藏地址工具栏
    Swipe.js支持网页点击和数字导航
    String类的概述和常用方法
    今天的学习
    集合的区别
    面向对象总结
    面向对象的封装
    方法的多态中的重写
  • 原文地址:https://www.cnblogs.com/ajaemp/p/12034739.html
Copyright © 2011-2022 走看看