You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Git版本实现Symfony站点版本自动化追踪方案问询

自动获取Git Commit版本并同步到Symfony站点的方案

方案一:Composer脚本自动生成版本到.env

这种方式适合开发和部署阶段自动触发,无需手动干预:

  1. 新建版本生成脚本 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);
  1. 在composer.json中添加触发脚本,确保每次安装/更新依赖时自动生成版本:
"scripts": {
    "post-install-cmd": [
        "@php scripts/generate-version.php"
    ],
    "post-update-cmd": [
        "@php scripts/generate-version.php"
    ]
}
  1. 在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信息,注入到环境变量或配置文件:

  1. 在部署脚本中添加以下命令:
# 获取最新短commit哈希
COMMIT_HASH=$(git rev-parse --short HEAD)
# 将版本写入.env.local(或直接设置环境变量)
echo "APP_VERSION=\"$COMMIT_HASH\"" > .env.local
  1. 后续使用方式同方案一,Twig中直接调用{{ app.version }}即可。

方案三:Twig扩展动态获取版本(带缓存)

适合需要动态获取但又不想频繁执行Git命令的场景,通过缓存文件避免重复计算:

  1. 创建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;
    }
}
  1. 在Twig模板中直接调用:
<!-- 登录页头部隐藏信息 -->
<!-- App Version: {{ app_version() }} -->

其他版本追踪建议

  • 隐藏式版本标记:在HTML头部添加注释或meta标签,普通用户不可见,管理员可通过查看源码确认版本
  • 后台系统信息页:在管理员后台新增页面,展示版本号、部署时间、服务器环境等详细信息,方便内部核查
  • 缓存版本文件:部署时生成VERSION文件存放在项目根目录,内容为commit哈希,可通过服务器文件管理工具直接查看,无需进入站点

内容的提问来源于stack exchange,提问作者BertDB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 21:30:25