luguohuakai/packme

将打包代码转换为 tar.gz 格式

v1.0.37 2024-09-20 06:56 UTC

README

序言

作为开发者: 你是否开发完一个功能后,还在逐个地查找变更文件进行打包,然后编写更新文档,告诉一线人员如何替换文件,升级了哪些功能?

作为一线人员: 你是否还在逐个地将研发提供的文件替换到服务器上,有时候文件很多,容易出错,完成这些工作后还没有文档记录,一旦出错还要逐个文件地恢复。

PACKME就是为了解决这些问题而设计的小工具,旨在提升开发愉悦感。无论研发还是一线人员,只需一键即可完成打包和部署。

composer require --dev luguohuakai/packme:~1.0.0

环境依赖: php>=7.4/git/zippy

packme

注意:项目必须使用Git进行管理
注意:项目中尽量不要出现中文路径和文件名,否则打包时可能会出现问题

请在需要打包的项目根目录下执行

  • Windows: .\vendor\bin\packme.bat
  • Linux: php vendor/bin/packme
Please select packaging method:
      # 全量打包(默认) 可选是否打包vendor目录
      # 全量打包首次运行会在项目根目录下生成dist/version.ini
      # 全量打包时version.ini会自动打包进项目根目录
      [1]: Full packaging
      # 打包最近一次提交和当前未提交的文件
      [2]: Pack the most recently commit and currently not commit files
      # 打包某两次提交的差异文件(需要输入两次提交的commit id 短hash)
      # 注意: 打包差异文件不包括old_commit_id的文件, 包括new_commit_id的文件
      [3]: Pack the difference files commit between two times
      # 打包当前已修改但未提交的文件(注意: 如果当前没有修改的文件会进行全量打包)
      [4]: Pack files that have been modified but not yet commit
      # 打包最近一次提交的文件
      [5]: Pack the most recently commit files
      # 打包最近两次提交的文件
      [6]: Pack the last two commit files
      # 打包指定的一次提交
      [7]: Pack the specified one-time commit
      # 打包指定分支 默认为当前分支 (打包从分支创建到当前最新commit的变更文件)
      [8]: Pack specified branch
      # 打包指定目录(注意:不要出现中文路径或文件名)
      [9]: Pack specified path
 Your choice (default [5]): 
  • 打包产物将生成于./dist/目录下

  • 注意:全量打包时,若选择打包vendor目录将花费较长时间,请耐心等待

  • 同时还可能生成./dist/version.ini,用于记录版本信息

  • 大版本更新方式:只需在打包前手动修改./dist/version.ini中大版本即可,例如:将V1.0修改为V2.1

  • 支持在./dist/目录下编写changes.txt说明文档,changes.txt会被自动打包,打包时会自动向文档追加提交信息和变更的文件路径

  • ./dist/changes.txt如果没有,需要自行创建

更新迭代计划

packme: 打包模式 9 需支持打包绝对路径:如: D:\PhpstormProjects\path\to\project 或者 /Users/xx/path/to/project packme: 打包模式 3 如果直接回车不输入 commit id,可以默认取当前分支最新一次提交

已知问题

1. 文件名存在中文时打包出错,可能是本地环境配置问题
执行以下命令:
git config --global core.quotepath false
git config --global core.assumeunicode true

2. 打包没有文件变更的提交(只有文件删除)时会进行全量打包
修复方案 无文件变更时停止打包

3. 新增文件,然后选择[4]进行打包会报错 如:
Please select packaging method:
      [1]: Full packaging
      [2]: Pack the most recently commit and currently not commit files
      [3]: Pack the difference files commit between two times
      [4]: Pack files that have been modified but not yet commit
      [5]: Pack the most recently commit files
      [6]: Pack the last two commit files
      [7]: Pack the specified one-time commit
      [8]: Pack specified branch
 Your choice (default [5]): 4
Change file exists: ./dist/changes.txt
fatal: pathspec '测试中文文件能否打包和安装.md' did not match any files

replaceme

replaceme.ini配置说明

# 要替换的项目在服务器上的绝对路径(自动生成)(可以更改)
object_root = /srun3/www/srun4-mgr/
# 备份文件后缀名(自动生成)(不可更改)
backup_suffix = 20230906011724
# 安装包中需要忽略的目录前缀(按需手动配置)(默认为空)
# 如: 
# 安装包中目录为: `ui/assets/img/icon-sprite.svg`
# 服务器中目录为: `/usr/share/zabbix/assets/img/icon-sprite.svg`
# 则需要配置为: 忽略安装包中 `ui/` 
ignore_dir_prefix = ui/

replaceme

部署

  • 将安装包直接上传到服务器任意目录

  • 解压缩安装包到任意空目录,空目录下不能有任何其它文件

  • 如: tar -zxf xxx.tar.gz -C ./test

  • 进入解压后的目录

  • 如: cd test

  • 执行: php ./replaceme (老版本PHP5请执行php ./replaceme5, 下面不再赘述)

  • 如需记录更新日志则这样执行: php ./replaceme | tee zzz_exec.log

  • 支持自定义备份后缀: php ./replaceme --backup=xxx

# 执行过程解释
php ./replaceme
  # 这里需要指定当前项目的根目录, 且项目根目录必须存在, 如果默认目录正确则直接回车
  请指定项目根目录(默认:/srun3/www/xxx/): 

请知悉:如果被替换的文件存在,会先备份原来的文件再进行替换,如果文件不存在,则会进行自动创建

支持回滚操作

  • 只能回滚当前安装包内的文件
  • 回滚命令: php ./replaceme --rollback