npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

yj-deploy

v0.0.4

Published

ssh sftp

Downloads

6

Readme

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',
      'echo - 镜像地址: harbor.yunjingtech.cn:30002/$1/$tag',
    ]
  },

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

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

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

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

使用

配合打包命令使用

可以配合项目脚手架使用

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信息,主要是包含推送镜像阶段的日志,如果报错可以打开此开关

最后

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

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