
Research
Two Malicious Rust Crates Impersonate Popular Logger to Steal Wallet Keys
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
yj-deploy
是为解决公司内部项目部署到镜像服务器开发的工具,可帮助开发者自动构建镜像,并自动部署到镜像服务器上。
镜像仓库
镜像环境
等参数全程不需要连接跳板机做任何操作即可完成镜像推送
$ 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代表不重新推送
}
可以配合项目脚手架使用
//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.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
:是否启用自动部署功能,在配合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
:是否重置项目(默认为不重置),如果配置了此选项,则每次执行命令时会删除 dockerfile
upload.sh
配置文件,然后重新初始化项目
--imageStore
:镜像仓库名称(默认为dev-images),在测试或者正式环境可能需要配置,需要推送到指定的镜像仓库时配置,增加此动态配置可以使用更灵活,同一套主配置可以满足多个环境推送到不同的镜像仓库,如:
"scripts": {
// 开发环境
"deploy": "vite build --mode development -- --deploy"
// 测试环境
"deploy-test": "vite build --mode test -- --deploy --imageStore=sot-admin"
}
--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
:是否打印所有log信息,主要是包含推送镜像阶段的日志,如果报错可以打开此开关
--lazyUpload
:是否开启懒上传,如果开启,则不会上传全部文件,仅上传新增的文件。针对小程序图片等仅需要部署新增部分文件的项目有奇效
::: warning 如果小程序修改了相同路径和文件名的文件,会存在无法判断的情况(使用hash值能判断,但是成本过高),这种情况请关掉此选项,或使用 --reset 重置项目 :::
如有意见或建议,或bug或文档不清晰等问题,可随时向我反馈,或直接修改后提交,共同完善这个工具。
项目已提交到git:https://gitlab.yunjingtech.cn:10010/frontend/yj-deploy
支持判断是否推送成功,如果推送失败,则自动重试三次,可以手动配置重试次数
支持懒上传文件,大幅提升上传速度
兼容根据运维文档手动创建的脚本推送镜像
解决因为并行上传文件太多导致上传失败的问题,支持动态配置并行上传数据量
解决文件夹嵌套太深,可能会导致上传文件时文件夹还没有创建导致报错的问题
FAQs
ssh sftp
We found that yj-deploy demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
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.
Research
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
Research
A malicious package uses a QR code as steganography in an innovative technique.
Research
/Security News
Socket identified 80 fake candidates targeting engineering roles, including suspected North Korean operators, exposing the new reality of hiring as a security function.