bamboo 不能直接支持 php 持续交付,因其仅执行命令而不理解 php;需确保 agent 环境正确安装并配置 php/composer、显式使用绝对路径、避免 sudo、启用 phpunit xml 日志解析、部署时清除各类缓存,并注意 bamboo 变量在不同阶段的可用性。

PHP 项目不能直接用 Bamboo 做“持续交付”,因为 Bamboo 本身不理解 PHP,它只负责执行 Shell 命令、调用脚本、触发构建和部署——真正起作用的是你写的 build.sh、deploy.php 或 composer install 这些动作。
为什么 Bamboo 构建总卡在 “No executable found”
Bamboo 默认使用系统级 Shell(通常是 bash),但很多 PHP 项目依赖特定版本的 php、composer 或 npm。如果 Agent 机器没装、没加到 $PATH,或者用了 root 用户但 PHP 是普通用户安装的,就会报这个错。
- 检查 Agent 机器是否真有
php -v和composer --version输出(别只信文档) - 在 Bamboo 的
Script任务里显式写绝对路径,比如/opt/php82/bin/php artisan migrate - 避免用
sudo—— Bamboo Agent 通常以非 root 用户运行,sudo 会卡住或被禁用 - 如果用 Docker 构建,确保 Agent 已安装
docker且当前用户在docker组里
怎么让 Bamboo 正确识别 PHP 单元测试失败
Bamboo 默认靠命令退出码(exit code)判断任务成败,而 PHPUnit 默认失败时返回非 0 码——这没问题。但常见陷阱是:你在脚本里用了 set +e、|| true、或把 phpunit 包在 if 判断里却忘了 exit $?,结果 Bamboo 认为“执行完了就等于成功”。
- 测试任务必须用
phpunit --fail-on-warning --stop-on-failure,避免警告被忽略 - 不要在 Bamboo 脚本任务中写
phpunit || echo "ignored"—— 这会让 Bamboo 收到 exit code 0 - 推荐用 Bamboo 内置的
PHPUnit Parser测试器(需启用 XML 日志:phpunit --log-junit build/logs/junit.xml),它能解析失败用例并高亮显示 - 注意
php.ini中的memory_limit和max_execution_time,CI 环境常比本地更严格
部署到生产环境时,如何避免“代码更新了但缓存没清”
PHP 应用(尤其 Laravel、Symfony)严重依赖 OPcache、config cache、view cache。Bamboo 部署脚本如果只做 git pull + composer install --no-dev,上线后大概率出白屏或旧逻辑。
- 强制刷新 OPcache:部署后执行
curl -X GET http://your-app.com/flush-opcache.php(该文件需带鉴权且仅限内网) - Laravel 项目必须跑:
php artisan config:clear && php artisan cache:clear && php artisan view:clear && php artisan route:clear - 别在
public/index.php里硬编码缓存开关,用环境变量控制,比如APP_DEBUG=${bamboo_APP_DEBUG:-false} - 静态资源(CSS/JS)建议加 hash(如 Laravel Mix 的
mix.js(...).version()),否则 CDN 或浏览器可能缓存旧文件
最麻烦的不是写脚本,而是 Bamboo 的变量传递机制——${bamboo.planRepository.branchName} 在子作业里可能为空,${bamboo.buildNumber} 在部署阶段可能和构建阶段不一致。这些细节不验证一次根本发现不了。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











