基于Git版本实现Symfony站点版本自动化追踪方案问询
自动获取Git Commit版本并同步到Symfony站点的方案
方案一:Composer脚本自动生成版本到.env
这种方式适合开发和部署阶段自动触发,无需手动干预:
- 新建版本生成脚本
scripts/generate-version.php:
<?php // 获取最新短commit哈希及提交时间 $commitHash = trim(shell_exec('git rev-parse --short HEAD')); $commitDate = trim(shell_exec('git log -1 --format=%ci')); $version = "$commitHash ($commitDate)"; // 写入.env.local(该文件不会提交到Git,避免污染版本库) $targetFile = __DIR__ . '/../.env.local'; $envContent = file_exists($targetFile) ? file_get_contents($targetFile) : ''; // 替换或新增APP_VERSION配置 $envContent = preg_replace('/^APP_VERSION=.*/m', "APP_VERSION=\"$version\"", $envContent); if (!preg_match('/^APP_VERSION=/m', $envContent)) { $envContent .= "\nAPP_VERSION=\"$version\""; } file_put_contents($targetFile, $envContent);
- 在
composer.json中添加触发脚本,确保每次安装/更新依赖时自动生成版本:
"scripts": { "post-install-cmd": [ "@php scripts/generate-version.php" ], "post-update-cmd": [ "@php scripts/generate-version.php" ] }
- 在Symfony中配置参数并在Twig中使用:
在config/services.yaml中添加参数映射:
parameters: app.version: '%env(APP_VERSION)%'
登录页Twig模板中直接输出:
<!-- 可以放在HTML头部注释或隐藏元素中 --> <meta name="app-version" content="{{ app.version }}">
方案二:部署脚本注入版本(适合无Git的生产服务器)
如果生产服务器没有安装Git,可在CI/CD部署阶段提前获取commit信息,注入到环境变量或配置文件:
- 在部署脚本中添加以下命令:
# 获取最新短commit哈希 COMMIT_HASH=$(git rev-parse --short HEAD) # 将版本写入.env.local(或直接设置环境变量) echo "APP_VERSION=\"$COMMIT_HASH\"" > .env.local
- 后续使用方式同方案一,Twig中直接调用
{{ app.version }}即可。
方案三:Twig扩展动态获取版本(带缓存)
适合需要动态获取但又不想频繁执行Git命令的场景,通过缓存文件避免重复计算:
- 创建Twig扩展类
src/Twig/VersionExtension.php:
<?php namespace App\Twig; use Twig\Extension\AbstractExtension; use Twig\TwigFunction; class VersionExtension extends AbstractExtension { public function getFunctions(): array { return [ new TwigFunction('app_version', [$this, 'getAppVersion']), ]; } public function getAppVersion(): string { $cacheFile = __DIR__ . '/../../var/cache/app_version.txt'; // 生产环境优先读取缓存文件 if (file_exists($cacheFile) && $_ENV['APP_ENV'] === 'prod') { return trim(file_get_contents($cacheFile)); } // 开发环境直接从Git获取并更新缓存 $commitHash = trim(shell_exec('git rev-parse --short HEAD')); file_put_contents($cacheFile, $commitHash); return $commitHash; } }
- 在Twig模板中直接调用:
<!-- 登录页头部隐藏信息 --> <!-- App Version: {{ app_version() }} -->
其他版本追踪建议
- 隐藏式版本标记:在HTML头部添加注释或meta标签,普通用户不可见,管理员可通过查看源码确认版本
- 后台系统信息页:在管理员后台新增页面,展示版本号、部署时间、服务器环境等详细信息,方便内部核查
- 缓存版本文件:部署时生成
VERSION文件存放在项目根目录,内容为commit哈希,可通过服务器文件管理工具直接查看,无需进入站点
内容的提问来源于stack exchange,提问作者BertDB
相关产品推荐
相关产品推荐

