必须将版本号生成、CI触发、构建测试、安全同步四步集成进Gitee流水线;版本号以v开头的Git Tag为唯一来源,CI通过正则匹配语义化Tag触发,构建时安装无dev依赖并清理非必要文件,再用rsync+SSH同步至CentOS7,最后健康检查确保服务可用。

想让ThinkPHP项目具备清晰可追溯的版本号、自动打Tag、自动部署到CentOS7服务器,同时不破坏现有Git工作流和生产环境稳定性,就必须把版本号生成、CI触发、构建测试、安全同步四步全部串进Gitee流水线里。
给ThinkPHP项目注入语义化版本号
版本号不能靠人工写死在代码里,否则CI流程无法识别变更边界。必须用Git标签(Tag)作为唯一可信来源。
第一步:本地开发完成并测试通过后,在Gitee仓库页面手动创建一个带前缀的Tag,格式为 v1.2.3(注意开头小写v,不加空格或文字)。
第二步:确保该Tag指向的提交包含完整的 composer.lock 文件——没有它,CI环境install出的依赖版本可能与本地不一致,导致线上报错。
立即学习“PHP免费学习笔记(深入)”;
第三步:推送到远程:git push origin v1.2.3。这会触发Gitee Webhook,但注意:【Gitee默认不支持CI job执行git push】,后续自动化打Tag必须改用Personal Access Token(PAT)+ HTTPS地址,否则流程卡在权限拒绝。
配置Gitee CI流水线触发条件
Gitee的CI配置文件叫 .gitee-ci.yml,放在项目根目录。它只响应Tag推送,不响应普通分支提交。
方法一:基础触发配置
在 .gitee-ci.yml 中写入:
trigger: tags: - 'v*'
这表示只要推送以 v 开头的Tag就触发流水线,比如 v1.0.0、v2.1.5-beta 都会被捕获。
方法二:精准匹配正式发布Tag
若只想让符合语义化规范的正式版触发部署(排除预发布版本),改用正则:
trigger: tags: - '^v[0-9]+\.[0-9]+\.[0-9]+$'
这个正则严格匹配形如 v1.2.3、v10.0.0 的Tag,v1.2.3-rc1 或 v1.2 将被忽略。
在CI中构建ThinkPHP可部署包
ThinkPHP本身不打包,但CI必须产出不含.git、不含dev依赖、已优化自动加载的精简目录。
第一步:检出代码 → 安装PHP 8.2并启用必要扩展 → 运行 composer install --no-dev --optimize-autoloader
第二步:复制ThinkPHP核心运行时资源,执行 php think build(需确认项目已启用build命令支持);若未启用,跳过此步,直接进入清理。
第三步:删除所有非运行必需文件,命令必须包含 --exclude='.git' --exclude='tests' --exclude='docs' --exclude='.env.example',否则敏感文件或测试用例可能泄露到生产机。
第四步:生成部署摘要文件 version.txt,内容为 $(git describe --tags --always),它会输出类似 v1.2.3-5-gabc123 的精确提交标识,比单纯Tag名更可靠。
用rsync+SSH安全同步到CentOS7
这是最轻量也最可控的部署方式,不依赖Docker或systemd服务管理器,适配ThinkPHP原生部署场景。
方法一:使用Gitee Secrets存密钥
在Gitee仓库「设置→密钥管理」中添加四项Secrets:DEPLOY_HOST、DEPLOY_USER、DEPLOY_PATH、SSH_PRIVATE_KEY。其中 SSH_PRIVATE_KEY 必须先用 base64 编码再存入,CI运行时再 base64 -d 解码写入临时文件,避免明文暴露。
方法二:rsync命令必须带关键参数
执行同步命令:rsync -avz --delete --exclude='.git' -e "ssh -i /tmp/id_rsa -o StrictHostKeyChecking=no" ./ $DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_PATH
【--delete 参数不可省略】,否则旧版残留文件(如废弃的控制器、过期路由配置)会干扰新版本运行,ThinkPHP可能因类重复加载或配置冲突直接500。
方法三:上线前健康检查
同步完成后立即执行:curl -f http://your-domain.com/health.php || exit 1。该脚本应返回HTTP 200且内容为 {"status":"ok","tp_version":"v8.0.5"},验证框架已正确加载且Web服务存活。



















