关键在于打通“提交→拉取→装依赖→同步→生效”链路,三机分离(Git仓库、Jenkins、生产服务器),SSH密钥须用ssh-keygen -m PEM生成,仅装Git、Publish Over SSH、Workspace Cleanup三插件,通过Webhook触发+Jenkinsfile定义流程。

要让 Jenkins 实现 PHP 项目自动部署,关键不是堆插件或写复杂脚本,而是把“代码提交 → 拉取 → 安装依赖 → 同步到生产机 → 启动生效”这条链路打通、压稳、可验证。
三台机器必须分开,角色不能混用
Git 仓库(如 GitLab)只管存代码;Jenkins 服务器只管调度和执行;生产服务器(LNMP/LAMP)只管运行 PHP。合并在一台机器上看似省事,实则绕过真实环境验证,上线后容易出问题。
SSH 免密登录必须用 PEM 格式密钥
Jenkins 的 Publish Over SSH 插件对密钥格式敏感。别用默认命令生成密钥,执行这个:ssh-keygen -m PEM -t rsa -b 4096 -C "jenkins-deploy" -f ~/.ssh/jenkins_deploy
把公钥 jenkins_deploy.pub 的内容追加到生产服务器对应用户的 ~/.ssh/authorized_keys 中;私钥 jenkins_deploy 后续填入 Jenkins 插件配置。
只装这几个必要插件,够用且稳定
- Git plugin:拉代码,支持分支、Tag 过滤
- Publish Over SSH:同步文件 + 执行远程命令(改权限、清缓存、重启 PHP-FPM/Nginx)
- Workspace Cleanup Plugin:每次构建前自动清空工作区,避免
.env、runtime、日志残留干扰
不用装“PHP Plugin”或“PHPUnit Plugin”——PHP 项目靠 composer install 装依赖,测试靠 vendor/bin/phpunit,Jenkins 只需能跑 Shell 命令就行。
Pipeline 脚本建议直接写进项目里(Jenkinsfile)
比自由风格任务更易协作、可版本追踪。一个典型流程示例:
- 拉取指定分支代码
-
composer install --no-dev --optimize-autoloader - 复制
.env.production到.env,或用sed替换数据库配置 -
npm ci && npm run build(如有前端资源) - 用 rsync 同步代码到生产目录(排除
.git、node_modules、tests等) - 远程执行:
chown -R www-data:www-data /var/www/myapp、systemctl reload php-fpm、nginx -s reload
Webhook 触发比轮询更及时可靠
在 GitLab 项目设置 → Webhook 里填 Jenkins 的地址(如 http://jenkins.example.com/generic-webhook-trigger/invoke),事件选 Push Events。Jenkins 端装 Generic Webhook Trigger 插件即可响应,避免定时轮询的延迟和无效扫描。
不复杂但容易忽略
立即学习“PHP免费学习笔记(深入)”;



















