thinkphp插件自动化部署需gitee流水线拉取独立插件仓库,执行composer安装、rsync同步至addons目录,再通过服务器端脚本调用php think addon:install触发install()方法,并强制执行optimize:config与optimize:route以确保配置和路由写入runtime缓存,避免500或404错误。

在ThinkPHP项目中实现插件的自动化部署,需绕过手动上传、解压、配置、启用等重复操作,让Gitee流水线拉取插件代码后,自动完成安装、权限设置、数据库初始化及运行时缓存刷新——这要求部署脚本能识别插件目录结构、执行install()方法、同步public静态资源,并避免覆盖已有runtime日志与用户上传文件。
准备插件源码与仓库结构
在Gitee新建私有仓库,存放插件全部源码,根目录必须包含plugin.php(入口文件)、install.sql(可选)、config/plugin.php(可选)、public/(静态资源)、controller/(可选);【plugin.php必须声明namespace且继承think\addon\Plugin基类】。不要把插件直接塞进主项目addons/目录下提交,否则流水线无法单独构建和版本隔离。
在主项目根目录的.giteeignore中追加一行:/addons/test/(假设插件标识为test),确保主项目Git不跟踪插件内容,由流水线独立拉取。
配置Gitee流水线构建阶段
进入Gitee仓库 → 流水线 → 新建流水线 → 选择“自定义构建”模板。
在“构建脚本”区域粘贴以下命令:
phpVersion: '8.1'
before_script:
- composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
script:
- git clone https://$GUSER:$GTOKEN@gitee.com/yourname/test-addon.git /tmp/test-addon
- cd /tmp/test-addon && composer install --no-dev --optimize-autoloader
- mkdir -p $CI_PROJECT_DIR/addons/test
- rsync -avz --exclude='tests/' --exclude='vendor/' --exclude='.git' /tmp/test-addon/ $CI_PROJECT_DIR/addons/test/
注意:GTOKEN必须是Gitee个人访问令牌(含repo权限),且在流水线变量中设为“保护变量”,否则克隆私有插件仓库会失败。
编写服务器端部署脚本
在目标服务器上创建 /opt/thinkphp-deploy-plugin.sh,赋予可执行权限:
#!/bin/bash
PROJECT_PATH="/var/www/thinkphp"
ADDON_NAME="test"
cd $PROJECT_PATH || exit 1
php think addon:install $ADDON_NAME
该命令会自动调用插件类中的install()方法,执行SQL建表、复制配置、创建public链接;【必须确保think命令已全局可用,且PHP CLI版本与FPM一致】。
若插件含数据库操作,install.sql中禁止使用USE语句或分号结尾的空行,否则Db::execute会中断执行。
Gitee流水线部署阶段执行
在流水线“部署”阶段,使用SSH方式连接服务器,执行:
方法一:直连执行
ssh -o StrictHostKeyChecking=no $GUSER@$SERVER_HOST "cd /var/www/thinkphp && /opt/thinkphp-deploy-plugin.sh"
方法二:rsync同步+触发
rsync -avz --exclude='runtime/' --exclude='public/static/plugin/test' $CI_PROJECT_DIR/ $GUSER@$SERVER_HOST:/var/www/thinkphp/
ssh $GUSER@$SERVER_HOST "cd /var/www/thinkphp && php think addon:enable test && php think optimize:config && php think optimize:route"
最后一步必须执行optimize:config和optimize:route,否则新插件的配置和路由不会写入runtime/cache/,导致500错误或404。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











