yj-deploy
v0.0.4
Published
ssh sftp
Downloads
6
Readme
yj-deploy
yj-deploy
是为解决公司内部项目部署到镜像服务器开发的工具,可帮助开发者自动构建镜像,并自动部署到镜像服务器上。
目前已实现如下功能
- ✔ 项目打包完成后自动上传到跳板机
- ✔ 自动生成项目目录,自动创建dockerfile,upload.sh脚本文件
- ✔ 自动运行脚本,自动打包镜像,自动推送到镜像服务器(全程不用手动操作)
- ✔ 直接集成到vite,webpack项目
- ✔ 支持手动上传其他任何类型项目
- ✔ 支持灵活配置dockerfile,upload.sh等脚本内容
- ✔ 支持多种方式配置
镜像仓库
镜像环境
等参数
全程不需要连接跳板机做任何操作即可完成镜像推送
运行情况
安装
$ 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