Nodejs一键发布脚本

这篇具有很好参考价值的文章主要介绍了Nodejs一键发布脚本。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

前端项目或者nodejs项目分开发、测试、生产环境,有的没有没有接入 jenkins。每次都需要进行本地打包, 手动压缩上传到服务器目录,ssh 登录服务器后备份旧文件, 手动删除文件再将包解压到指定目录,操作流程比较繁琐,需要提前了解服务器部署目录,不太友好。

目标

  • 根据packeage.json 的scripts 来配置测试和生产环境的脚本。

  • 根据运行脚本获取相关环境的配置

  • 在部署脚本里面处理环境配置,然后实现

    • SSH登陆服务器

    • 压缩目录

    • 上传文件到服务器

    • 备份并删除服务器上的原文件

    • 解压服务器上的文件

需要用到的包

npm install dotenv dotenv-cli node-ssh silly-datetime archiver

以下是对这几个包的简要说明:

  1. dotenv:dotenv是一个流行的Node.js库,用于从.env文件中加载环境变量,并使其在应用程序中可用。它可以帮助您在开发过程中轻松管理环境变量,而无需硬编码到代码中。
  2. dotenv-cli:dotenv-cli是dotenv的命令行工具,它允许您在命令行中运行脚本时加载.env文件中的环境变量。这对于在命令行中运行脚本或执行其他命令时,临时设置环境变量非常有用。
  3. node-ssh:node-ssh是一个用于在Node.js中执行SSH操作的库。它提供了一组API,使您可以连接到远程服务器,执行命令,上传和下载文件等。它对于在Node.js应用程序中与远程服务器进行交互非常有用。
  4. silly-datetime:silly-datetime是一个简单的日期和时间格式化工具。它提供了一些函数,可以帮助您格式化日期和时间,例如将日期格式化为指定的字符串,获取当前时间戳等。
  5. archiver:archiver是一个用于创建和提取归档文件(如zip、tar等)的库。它提供了一组API,使您可以创建压缩文件,添加文件或文件夹到压缩文件中,以及从压缩文件中提取文件。它对于在Node.js中处理归档文件非常有用。

代码

环境变量文件 .env.test

SERVER_IP=47.xx.xx.209
SERVER_USER_NAME=root
SERVER_PASSWORD=xxxxxxx
SERVER_PROJECT_PATH=/www/wwwroot/xxxx
DIST_PATH=dist

package.json

"scripts": {
    "build-deploy:test": "dotenv -e .env.test node deploy.js",
    "build-deploy:pro": "dotenv -e .env.production node deploy.js",
  }

部署代码 deploy.js文章来源地址https://www.toymoban.com/news/detail-824344.html

const fs = require('fs');
const path = require('path');
const archiver = require('archiver');
const {NodeSSH} = require('node-ssh');
const sd = require('silly-datetime');
// 加载配置文件
require('dotenv').config()
// 当前时间
const curTime = sd.format(new Date(), 'YYYYMMDDHH');
const distPath = path.resolve(__dirname, process.env.DIST_PATH);
const ssh = new NodeSSH();
// 远程服务器配置信息
let config = {
  host: process.env.SERVER_IP,
  username: process.env.SERVER_USER_NAME,
  password: process.env.SERVER_PASSWORD,
  pathUrl: process.env.SERVER_PROJECT_PATH,
}



// 本地文件上传至远程服务器
async function uploadFile() {
  try {
    await ssh.connect({
      host: config.host,
      username: config.username,
      password: config.password,
      port: 22,
    });
    console.log('SSH login success');
    await ssh.putFile(
      `${__dirname}/dist${curTime}.zip`,
      `${config.pathUrl}/dist${curTime}.zip`
    );
    console.log('The zip file is uploaded successfully');
    remoteFileUpdate();
  } catch (err) {
    console.log('The file upload failed:', err);
    process.exit(0);
  }
}

// 服务端远端文件解压,更新
async function remoteFileUpdate() {
  let cmd =`mv dist dist.bak${curTime} && unzip dist${curTime}.zip`;
  try {
    const result = await ssh.execCommand(cmd, {
      cwd: config.pathUrl,
    });
    console.log(`The update message is: ${result.stdout}`);
    if (!result.stderr) {
      console.log('Congratulations! Update success!');
      process.exit(0);
    } else {
      console.log('Something went wrong:', result);
      process.exit(0);
    }
  } catch (err) {
    console.log('SSH connection failed:', err);
    process.exit(0);
  }
}

// 本地文件压缩
function zipDirector() {
  try {
    const output = fs.createWriteStream(`${__dirname}/dist${curTime}.zip`);
    const archive = archiver('zip', {
      zlib: {level: 9},
    });
    output.on('close', (err) => {
      if (err) {
        console.log('Something went wrong with the zip process:', err);
        return;
      }
      uploadFile();//本地文件上传至远程服务器
      console.log(`${archive.pointer()} total bytes`);
      console.log('Archiver has been finalized and the output file descriptor has closed.');
    });
    output.on('end', () => {
      console.log('Data has been drained');
    });
    archive.pipe(output);
    //要压缩的文件夹路径,和输出路径
    // 设置本地 dist 文件路径
    console.log(distPath)
    // 将指定目录打包压缩到压缩包中,并且重命名为h5
    archive.directory(distPath, "dist");
    archive.finalize();
  } catch (e) {
    console.log(e)
  }
}

(function() {
  // 更新代码
  zipDirector();
})()

到了这里,关于Nodejs一键发布脚本的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • windows部署python项目(以Flask为例)到docker,通过脚本一键生成dockerfile并构建镜像启动容器

    这里使用 pipreqs 进行依赖库的识别。使用 pipreqs 可以自动检索到当前项目下的所有组件及其版本,并生成 requirements.txt 文件。相比直接用pip freeze 命令,避免将整个python环境的依赖包写入。 在项目的当前目录中执行 pipreqs ./ --encoding=utf8 --force 这里使用的是一个基于flask项目,

    2023年04月08日
    浏览(55)
  • 项目上线部署--》服务器部署流程(二)安装Nginx、Node.js、MySQL

    阅读本篇文章前请先阅读项目上线部署--》服务器部署流程(一)  目录 🌟安装Nginx 先登录远程服务器,安装依赖包 下载并解压包  🌟安装Node.js  安装nodejs进程管理工具  🌟安装MySQL 🌟写在最后 先登录远程服务器,安装依赖包 # 一键安装上面四个依赖 yum -y install gcc zli

    2024年02月07日
    浏览(66)
  • 【Nodejs】Node.js简介

    Node 的重要性已经不言而喻,很多互联网公司都已经有大量的高性能系统运行在 Node 之上。Node 凭借其单线程、异步等举措实现了极高的性能基准。此外,目前最为流行的 Web 开发模式是前后端分离的形式,即前端开发者与后端开发者在自己喜欢的 IDE 上独立进行开发,然后通

    2024年02月12日
    浏览(62)
  • Node.js脚本项目合集(一):Node.js+FFmpeg实现批量从B站导出离线缓存视频到mp4格式,mp4转mp3,实现听歌自由

    最近被一首JISOO的FLOWER歌洗脑,但碍于版权原因,只能在B站上看mv视频,盯着尬舞听歌着实有些尴尬,突发奇想,如果能将视频中的音频和视频分开不就能只听音乐,不用看尴尬的舞蹈吗?刚好手机上有不少B站本地的学习视频想导入到电脑上看,可是B站下载的格式.m4s文件,

    2024年02月07日
    浏览(75)
  • 在服务器部署Next.js、Node.js项目,并实现自动部署(伪CI\CD)超详细

    目录 一、引言 二、配置服务器 1. 远程连接服务器 · 用服务商提供的远程连接 · 用MotaXterm来远程连接 ​编辑​编辑​编辑  2. 登录实例 · 如何获取账号和密码 · 服务商远程连接方式:  · MotaXterm连接方式 三、项目准备与测试 1. 安装nodejs · 进入安装目录 · 下载 · 解压 ·

    2024年02月05日
    浏览(96)
  • 【Nodejs】Node.js开发环境安装

    在命令窗口中输入 node -v 可以查看版本 0.x 完全不技术 ES6 4.x 部分支持 ES6 特性 5.x 部分支持ES6特性(比4.x多些),属于过渡产品,现在来说应该没有什么理由去用这个了 6.x 支持98%的 ES6 特性 8.x 支持 ES6 特性 去 Node.js 的官网下载安装包: 我们也可以下载历史版本。 后续如果

    2024年02月15日
    浏览(76)
  • Node.Js篇 NodeJs使用MongoDB

    目录 介绍 概念解析                   安装 启动时注意事项 NodeJs操作Mongo 介绍 MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。                                                           

    2024年02月09日
    浏览(53)
  • 【nodejs】用Node.js实现简单的壁纸网站爬虫

    在这个博客中,我们将学习如何使用Node.js编写一个简单的爬虫来从壁纸网站获取图片并将其下载到本地。我们将使用Axios和Cheerio库来处理HTTP请求和HTML解析。 首先,确保你已经安装了Node.js环境。然后,我们将创建一个新的文件夹,初始化项目并安装所需的依赖库: 编写爬虫

    2024年02月12日
    浏览(47)
  • 「NodeJs进阶」超全面的 Node.js 性能优化相关知识梳理

    相信对于前端同学而言,我们去开发一个自己的简单后端程序可以借助很多的nodeJs的框架去进行快速搭建,但是从前端面向后端之后,我们会在很多方面会稍显的有些陌生,比如「性能分析」,「性能测试」,「内存管理」,「内存查看」,「使用C++插件」,「子进程」,「

    2024年02月01日
    浏览(54)
  • Nodejs项目包发布

    下载nodejs压缩包 解压nodejs压缩包 为node和npm创建软链接 查看node和npm版本 nrm是npm源管理器,可以切换不同源。 查看npm的bin目录 将npm的bin下的nrm等命令,加到环境变量 查看nrm的版本 查看npm源 注册npm账号:https://www.npmjs.com 配置开启2FA:https://docs.npmjs.com/configuring-two-factor-authe

    2024年02月07日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包