197 lines
7.9 KiB
Bash
197 lines
7.9 KiB
Bash
#!/bin/bash
|
||
# patch_config.sh - 企业级补丁配置
|
||
|
||
# ==============================================================================
|
||
# 基础配置 - 定义补丁的基本信息
|
||
# ==============================================================================
|
||
|
||
# 基础配置
|
||
PATCH_NAME="upgrade" # hotfix、upgrade、security
|
||
PATCH_VERSION="1.0.0" # 补丁版本号,1.0.0-alpha.1 1.0.0-beta.1 1.0.0-rc.1
|
||
PATCH_DESCRIPTION="紧急升级修复"
|
||
PATCH_AUTHOR="devops"
|
||
PATCH_EMAIL="devops@aigc-quickapp.com"
|
||
|
||
# ==============================================================================
|
||
# 文件筛选配置 - 定义哪些文件需要被包含或排除
|
||
# ==============================================================================
|
||
|
||
## 包含的文件模式
|
||
INCLUDE_PATTERNS=(
|
||
".+/.*" # 匹配所有子目录下的所有文件
|
||
".env"
|
||
".htaccess"
|
||
# '.user.ini' # .user.ini 采用生产服务器源码自己的配置,不作为补丁文件
|
||
'404.html'
|
||
"composer.json"
|
||
"index.html"
|
||
"index.php"
|
||
"install.lock"
|
||
"install.php"
|
||
"nginx.htaccess"
|
||
"think"
|
||
"LICENSE"
|
||
"README.md"
|
||
"robots.txt"
|
||
)
|
||
|
||
## 排除的文件模式
|
||
EXCLUDE_PATTERNS=(
|
||
"*.log"
|
||
"*.tmp"
|
||
"*.bak"
|
||
"*.swp"
|
||
"*.swx"
|
||
"^.github/"
|
||
# 排除任何位置的node_modules文件夹及其所有子目录和文件
|
||
".*/node_modules($|/.*)"
|
||
# 排除任何位置的__pycache__文件夹及其所有子目录和文件
|
||
".*/__pycache__($|/.*)"
|
||
# 排除根目录下的一级文件夹及其所有子目录和文件
|
||
"^.git/"
|
||
"^cache($|/.*)"
|
||
"^temp($|/.*)"
|
||
"^tmp($|/.*)"
|
||
"^logs($|/.*)"
|
||
"^runtime($|/.*)"
|
||
"^uploads($|/.*)"
|
||
"^attachment($|/.*)"
|
||
"^h5($|/.*)"
|
||
"^hwapp($|/.*)"
|
||
".DS_Store"
|
||
"Thumbs.db"
|
||
)
|
||
|
||
# ==============================================================================
|
||
# 文件大小限制 - 定义补丁处理的文件大小范围
|
||
# ==============================================================================
|
||
|
||
# 文件大小限制
|
||
MAX_FILE_SIZE="20MB" # 最大文件大小
|
||
MIN_FILE_SIZE="0KB" # 最小文件大小
|
||
|
||
# ==============================================================================
|
||
# 时间过滤 - 定义补丁处理的文件时间范围
|
||
# ==============================================================================
|
||
|
||
# 时间过滤
|
||
MODIFIED_AFTER="2000-01-01T00:00:00Z" # 仅包含修改时间在该时间之后的文件
|
||
CREATED_AFTER="2000-01-01T00:00:00Z" # 仅包含创建时间在该时间之后的文件
|
||
|
||
# ==============================================================================
|
||
# 比较方法配置 - 定义补丁处理的比较方式
|
||
# ==============================================================================
|
||
|
||
# 比较方法配置
|
||
# 比较内容和时间
|
||
COMPARISON_METHOD="content" # 比较方法: content, time, both
|
||
HASH_ALGORITHM="sha256" # 哈希算法,用于文件内容比较
|
||
TIME_PRECISION="second" # 时间精度,用于文件时间比较
|
||
COMPARE_PERMISSIONS=false # 是否比较文件权限
|
||
COMPARE_OWNERSHIP=false # 是否比较文件所有者
|
||
IGNORE_LINE_ENDINGS=true # 是否忽略换行符格式不同时(比如Windows的 \r\n vs Linux的 \n)
|
||
|
||
# ==============================================================================
|
||
# 增量配置 - 定义是否启用增量补丁
|
||
# ==============================================================================
|
||
|
||
# 增量配置
|
||
INCREMENTAL_ENABLED=true # 是否启用增量补丁
|
||
BASE_VERSION="1.0.0" # 基础版本,用于增量比较
|
||
DETECT_RENAMES=true # 是否检测文件重命名
|
||
BINARY_DIFF=true # 是否启用二进制差异比较
|
||
CHUNK_SIZE="8KB" # 二进制差异比较的块大小
|
||
|
||
|
||
|
||
# ==============================================================================
|
||
# 压缩配置 - 定义补丁压缩方式和级别
|
||
# ==============================================================================
|
||
|
||
# 压缩配置
|
||
COMPRESSION_ENABLED=true # 是否启用压缩
|
||
COMPRESSION_ALGORITHM="gzip" # gzip, bzip2, xz
|
||
COMPRESSION_LEVEL=6 # 压缩级别,1-9
|
||
PER_FILE_OPTIMIZATION=true # 是否对每个文件单独压缩
|
||
|
||
# ==============================================================================
|
||
# 安全配置 - 定义补丁签名和加密方式
|
||
# ==============================================================================
|
||
|
||
# 安全配置
|
||
SIGNING_ENABLED=false # 是否启用签名
|
||
SIGNING_ALGORITHM="rsa" # 签名算法,rsa, ecdsa
|
||
PRIVATE_KEY="/etc/patch/keys/private.pem" # 私钥文件路径
|
||
PUBLIC_KEY="/etc/patch/keys/public.pem" # 公钥文件路径
|
||
|
||
ENCRYPTION_ENABLED=false # 是否启用加密
|
||
ENCRYPTION_ALGORITHM="aes-256-gcm" # 加密算法,aes-256-gcm, aes-256-cbc
|
||
ENCRYPTION_KEY="/etc/patch/keys/encryption.key" # 加密密钥文件路径
|
||
ENCRYPTION_IV="/etc/patch/keys/encryption.iv" # 加密初始化向量文件路径
|
||
|
||
# ==============================================================================
|
||
# 备份配置 - 定义是否启用备份和备份策略
|
||
# ==============================================================================
|
||
|
||
# 备份配置
|
||
BACKUP_ENABLED=true # 是否启用备份
|
||
BACKUP_STRATEGY="full" # 备份策略,full, incremental, differential
|
||
BACKUP_RETENTION_DAYS=30 # 备份保留天数
|
||
BACKUP_DIR="/var/backups/patch" # 备份目录
|
||
|
||
# ==============================================================================
|
||
# 回滚配置 - 定义是否启用自动回滚和回滚策略
|
||
# ==============================================================================
|
||
|
||
# 回滚配置
|
||
ROLLBACK_ENABLED=true # 是否启用自动回滚
|
||
ROLLBACK_AUTO_GENERATE=true # 是否自动生成回滚脚本
|
||
ROLLBACK_STRATEGY="snapshot" # 回滚策略,snapshot, restore
|
||
ROLLBACK_INFO_DIR="/var/lib/patch_system/rollback_info"
|
||
|
||
# ==============================================================================
|
||
# 通知配置 - 定义是否启用通知和通知渠道
|
||
# ==============================================================================
|
||
|
||
# 通知配置
|
||
NOTIFICATIONS_ENABLED=false # 是否启用通知
|
||
SLACK_WEBHOOK="https://hooks.slack.com/services/..." # Slack Webhook URL
|
||
EMAIL_RECIPIENTS="devops@company.com,team@company.com" # 邮箱接收人列表
|
||
|
||
# ==============================================================================
|
||
# 性能配置 - 定义并行处理和资源限制
|
||
# ==============================================================================
|
||
|
||
# 性能配置
|
||
PARALLEL_PROCESSING=false # 是否启用并行处理
|
||
MAX_WORKERS=4 # 最大工作线程数
|
||
MEMORY_LIMIT="2GB" # 内存限制
|
||
IO_BUFFER_SIZE="64KB" # IO缓冲区大小
|
||
|
||
# ==============================================================================
|
||
# 输出配置 - 定义补丁输出格式和目录
|
||
# ==============================================================================
|
||
|
||
# 输出配置
|
||
OUTPUT_FORMAT="tar.gz" # 输出格式,tar.gz, zip
|
||
OUTPUT_DIRECTORY="/opt/patches" # 输出目录
|
||
NAMING_PATTERN="patch-{name}-{version}-{timestamp}-{git_commit}.{format}" # 文件名命名模式,包含占位符,举例:patch-app-1.0.0-20250101T000000Z-abc123.tar.gz
|
||
|
||
# ==============================================================================
|
||
# 日志配置 - 定义日志级别、文件路径和大小
|
||
# ==============================================================================
|
||
|
||
# 日志配置
|
||
LOG_LEVEL="INFO" # 日志级别,DEBUG, INFO, WARN, ERROR, TRACE; DEBUG 会开启终端调试输出,TRACE 只会开启详细日志输出
|
||
LOG_FILE="/var/log/patch_system/patch.log" # 日志文件路径
|
||
LOG_MAX_SIZE="10MB" # 日志文件最大大小
|
||
LOG_BACKUP_COUNT=10 # 日志文件备份数量
|
||
|
||
# ==============================================================================
|
||
# 长路径支持 - 定义是否启用长路径支持
|
||
# ==============================================================================
|
||
|
||
# 长路径支持
|
||
LONG_PATH_SUPPORT=true # 是否启用长路径支持
|
||
TAR_OPTIONS="--force-local" # tar命令选项,--force-local 强制使用本地文件系统
|