Socket
Book a DemoInstallSign in
Socket

yj-deploy

Package Overview
Dependencies
Maintainers
1
Versions
9
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

yj-deploy

ssh sftp

latest
npmnpm
Version
0.0.8
Version published
Maintainers
1
Created
Source

yj-deploy

yj-deploy 是为解决公司内部项目部署到镜像服务器开发的工具,可帮助开发者自动构建镜像,并自动部署到镜像服务器上。

目前已实现如下功能

  • ✔ 项目打包完成后自动上传到跳板机
  • ✔ 自动生成项目目录,自动创建dockerfile,upload.sh脚本文件
  • ✔ 自动运行脚本,自动打包镜像,自动推送到镜像服务器(全程不用手动操作)
  • ✔ 直接集成到vite,webpack项目
  • ✔ 支持手动上传其他任何类型项目
  • ✔ 支持灵活配置dockerfile,upload.sh等脚本内容
  • ✔ 支持多种方式配置 镜像仓库 镜像环境等参数
  • ✔ 支持懒上传,仅上传新增部分文件,提升上传效率
  • ✔ 支持失败自动重新上传,支持配置次数,防止网络不稳定可能导致上传失败

全程不需要连接跳板机做任何操作即可完成镜像推送

运行情况

预览

安装

NPM

$ yarn add yj-deploy
$ npm i yj-deploy -D

简单配置

import path from 'path'
import yjDeploy from 'yj-deploy'

const deploy = new yjDeploy({
  host: '', // ip
  port: '', // 端口
  username: '', // 账号
  password: '', // 密码
  namespace: '', // 项目名称,等同git地址目录名称
  // 本地文件目录
  fileDir: path.resolve('./dist'),
})

完整配置(包含默认配置)

{
  host: '', // ip (必填)
  port: '', // 端口 (必填)
  username: '', // 账号 (必填)
  password: '', // 密码 (必填)
  namespace: '', // 项目名称,等同git地址目录名称(必填)
  imageStore: 'dev-images', // 镜像仓库, 默认为 dev-images
  tmpName: 'dev', // 镜像环境, 默认 dev
  delay: 0, // 延迟上传时间 (部分项目构建需要时间,延迟上传可以解决)
  fileDir: '', // 本地文件目录(必填)
  rootDir: '/home/yjweb', // 远程sftp服务根目录 默认为 /home/yjweb
  // dockerfile文件信息
  dockerfile: {
    name: 'Dockerfile',
    content: [
      'FROM harbor.yunjingtech.cn:30002/yj-base/nginx:latest',
      'RUN rm -rf /usr/share/nginx/html/\*',
      'COPY dist /usr/share/nginx/html/'
    ]
  },

  // upload.sh文件信息(可覆盖,但需要注意 $1 和 $2参数的顺序)
  upload: {
    name: 'upload.sh',
    content: [
      '#!/bin/sh',
      'tag=`basename \\`pwd\\``:$2-`date +%Y%m%d`',
      'echo "- 镜像仓库: $1"',
      'echo "- 镜像环境: $2"',
      'docker build -t harbor.yunjingtech.cn:30002/$1/$tag .',
      'docker push harbor.yunjingtech.cn:30002/$1/$tag',
      'if [ $? -eq 0 ];then',
      'echo - 推送成功',
      'echo - 镜像地址: harbor.yunjingtech.cn:30002/$1/$tag',
      'else',
      'echo - 镜像推送失败,请重试或联系运维人员,如需查看全部docker日志,请在命令后添加 --allLog查看更多信息',
      'fi',
    ]
  },

  // 上传dist目录信息 (除非运维改变,否则不要配置)
  dist: {
    name: 'dist'
  },

  parallelDir: 20, // 文件夹并行创建数量,如果在创建文件夹阶段报错,可以尝试减少此配置

  parallelFile: 50, // 文件并行上传数量,如果在上传文件阶段报错,可以减少此配置

  allLog: false, // 是否打印所有log信息,主要是包含推送镜像阶段的日志,如果报错可以打开此开关

  lazyUpload: false, // 是否开启懒上传,针对小程序图片等仅需要部署新增部分文件的项目有奇效
  
  rePushNum: 3, // 重新推送次数,为0代表不重新推送
}

使用

配合打包命令使用

可以配合项目脚手架使用

webpack 中使用

//vue.config.js
const path = require('path')
const yjDeploy = require('yj-deploy')
module.exports = {
  configureWebpack: config => {
    return {
      plugins: [
        new yjDeploy({
          host: '',
          port: '',
          username: '',
          password: '',
          namespace: '', // 项目名称,等同git地址目录名称
          // 本地文件目录
          fileDir: path.resolve('./dist'),
        })
      ]
    }
  }
}

// package.json
"scripts": {
  "deploy": "vue-cli-service build --mode development --deploy"
}
// 使用 yarn deploy 或 npm run deploy

vite 项目中使用

//vite.config.js
import path from 'path'
import yjDeploy from 'yj-deploy'

export default defineConfig({
  plugins: [
    new yjDeploy({
      host: '',
      port: '',
      username: '',
      password: '',
      namespace: '', // 项目名称,等同git地址目录名称
      // 本地文件目录
      fileDir: path.resolve('./dist'),
    })
  ]
})

// package.json
"scripts": {
  "deploy": "vite build --mode development -- --deploy"
}
// 使用 yarn deploy 或 npm run deploy

上传任意项目

// 1、在项目中创建uploader.js
// 2、配置和webpack插件模式相同
const deploy = new yjDeploy({
  host: '',
  port: '',
  username: '',
  password: '',
  namespace: '', // 项目命名空间,等同于镜像地址目录名称
  // 本地文件目录
  fileDir: path.resolve('./dist'),
})

deploy.upload() // 开始上传
// 然后在项目根目录终端下运行如下命令(node直接上传不需要加--deploy动态指令)
node uploader.js 

// 增加动态配置
node uploader.js --tmpName=test

动态配置项

由于部分项目可能需要区分环境,所以需要动态配置项,目前支持动态配置项如下:

--deploy

--deploy :是否启用自动部署功能,在配合vite或webpack时需要使用,如果启用,在命令后跟上 --deploy即可

// vite项目 package.json
"scripts": {
  "deploy": "vite build --mode development -- --deploy"
}

// webpack项目 package.json
"scripts": {
  "deploy": "vue-cli-service build --mode development --deploy"
}

::: warning 由于vite的自定义命令需要在vite专属配置后加 -- 分割,所以vite项目的命令中间会多一个 -- 分割,这就是vite和webpack执行命令的差异,后续不再提及 :::


--reset

--reset :是否重置项目(默认为不重置),如果配置了此选项,则每次执行命令时会删除 dockerfile upload.sh 配置文件,然后重新初始化项目


--imageStore

--imageStore :镜像仓库名称(默认为dev-images),在测试或者正式环境可能需要配置,需要推送到指定的镜像仓库时配置,增加此动态配置可以使用更灵活,同一套主配置可以满足多个环境推送到不同的镜像仓库,如:

"scripts": {
  // 开发环境
  "deploy": "vite build --mode development -- --deploy"
  // 测试环境
  "deploy-test": "vite build --mode test -- --deploy --imageStore=sot-admin"
}

--tmpName

--tmpName :镜像环境名称(默认为 dev),在测试或者正式环境可能需要配置,需要推送到指定的镜像环境时配置,防止镜像名重复导致覆盖,同一套主配置可以满足多个环境推送到不同的镜像地址,如:

"scripts": {
  // 开发环境
  "deploy": "vite build --mode development -- --deploy --tmpName=dev"
  // 测试环境
  "deploy-test": "vite build --mode test -- --deploy --tmpName=test"
  // 正式环境
  "deploy-prod": "vite build --mode production -- --deploy --tmpName=prod"
}

--allLog

--allLog :是否打印所有log信息,主要是包含推送镜像阶段的日志,如果报错可以打开此开关


--lazyUpload

--lazyUpload :是否开启懒上传,如果开启,则不会上传全部文件,仅上传新增的文件。针对小程序图片等仅需要部署新增部分文件的项目有奇效

::: warning 如果小程序修改了相同路径和文件名的文件,会存在无法判断的情况(使用hash值能判断,但是成本过高),这种情况请关掉此选项,或使用 --reset 重置项目 :::


最后

如有意见或建议,或bug或文档不清晰等问题,可随时向我反馈,或直接修改后提交,共同完善这个工具。


项目已提交到git:https://gitlab.yunjingtech.cn:10010/frontend/yj-deploy

升级日志

v0.0.8

支持判断是否推送成功,如果推送失败,则自动重试三次,可以手动配置重试次数

v0.0.6

支持懒上传文件,大幅提升上传速度

v0.0.5

兼容根据运维文档手动创建的脚本推送镜像

v0.0.4

解决因为并行上传文件太多导致上传失败的问题,支持动态配置并行上传数据量

v0.0.3

解决文件夹嵌套太深,可能会导致上传文件时文件夹还没有创建导致报错的问题

FAQs

Package last updated on 23 Jun 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts