GoCD 不是 PHP 工具,而是用 Java 编写的独立 CI/CD 服务器;PHP 项目需在 agent 安装匹配版本的 php/composer/git,并通过 exec 任务执行命令,将 dist.tgz 等声明为 artifact 实现部署。

PHP 本身不提供持续交付(CD)管道能力,GoCD 也不是 PHP 工具——它是一个用 Java 编写的独立 CI/CD 服务器。所谓“PHP 实现 GoCD 管道”,实际是指:用 PHP 项目作为 GoCD 的构建产物来源,由 GoCD 调度执行 PHP 相关的测试、打包、部署等步骤。
GoCD 怎么识别和运行 PHP 项目
GoCD 不关心你用什么语言写代码,只关心你能否在 agent 上通过命令行完成构建。关键在于配置正确的 pipeline 和 job,让 GoCD 启动的 agent 执行 PHP 命令。
- 确保 GoCD agent 机器已安装
php、composer(如需)、git,且版本与项目兼容(例如 PHP 8.1+ 项目不能跑在 PHP 7.4 agent 上) - 在 pipeline 的
job中,用exec任务调用php或./vendor/bin/phpunit,而非依赖 PHP 内置 Web 服务 - 避免在 job 中启动长期进程(如
php -S),GoCD 会等待命令退出;后台服务需用nohup+ 显式检查端口或 PID,否则 job 会卡住或误判失败
PHP 项目怎么适配 GoCD 的 artifact 和部署流程
GoCD 的交付链路依赖明确的 artifact(构建产物)路径和 stage-to-stage 传递机制。PHP 项目通常不编译,但需要把可部署包(如 dist/、public/ + vendor/)打成 tar 或 zip,并声明为 artifact。
- 在 build job 的
tasks末尾加一条exec:tar -czf dist.tgz public/ vendor/ .env.example - 在 job 的
artifacts配置中声明:dist.tgz(文件)或dist/(目录),GoCD 才会在后续 stage 自动挂载 - 部署 stage 的 job 若需解压并 rsync 到服务器,应使用
script任务调用ssh或rsync,不要把私钥硬编码进 config;建议用 GoCD 的environment variables注入DEPLOY_HOST等参数
为什么不用“PHP 可视化 CD 工具”替代 GoCD
市面上没有主流、生产可用的纯 PHP 实现的可视化 CD 工具。所谓“PHP 可视化 CD”,多是 Laravel Horizon(仅队列监控)、自研 Dashboard(只看日志/状态),或用 PHP 封装 Jenkins API 的玩具项目。它们不处理 pipeline 编排、依赖图、锁资源、回滚策略等 CD 核心能力。
立即学习“PHP免费学习笔记(深入)”;
-
Jenkins、GoCD、GitLab CI是经过大规模验证的调度引擎;PHP 只适合做其中的“构建脚本”或“部署钩子” - 试图用
symfony/console+ReactPHP手搓 pipeline 调度器,会重复造轮子,且难以解决并发控制、失败重试、审计日志等工程问题 - 如果只是想“在 PHP 后台看 CD 状态”,正确做法是调用 GoCD 的 REST API(如
/go/api/pipelines/{name}/history),前端用 Vue/React 渲染,后端用 PHP 做代理和鉴权
真正卡住 PHP 团队落地 CD 的,从来不是“选哪个 PHP 工具”,而是 agent 环境一致性、artifact 版本标识(比如没打 Git tag 就部署)、以及部署后健康检查是否真能探测到 PHP-FPM 进程响应——这些细节比界面好不好看重要得多。



















