如何在本地Docker化Drupal项目导出GitLab CI_COMMIT_REF_NAME至PHP
问题背景
负责一个GitLab管理的Docker化Drupal项目,需要在本地开发环境实现与集成/预生产/生产环境一致的版本标识功能:通过GitLab的${CI_COMMIT_REF_NAME}(分支名)替换代码中的'local;',或直接让PHP访问该变量。目前CI环境已通过.gitlab-ci.yml定义变量+替换脚本实现,但本地环境尝试以下方法均失败:
- 在
.gitlab-ci.yml中添加.local_env_project变量组,系统未识别 - 在
local.yml中给Docker服务配置环境变量,容器内printenv可见但PHP无法读取 - 给PHP/bin容器配置环境变量,同样存在PHP无法访问的问题
原因分析
- 本地环境不运行GitLab CI流水线,
.gitlab-ci.yml中的变量组仅在CI执行时生效,本地Docker Compose不会读取该配置 - PHP默认会清空系统环境变量(php-fpm的
clear_env默认值为yes),导致容器内的环境变量无法传递到PHP进程
解决方案
方案一:模拟CI的代码替换逻辑
本地无GitLab CI的${CI_COMMIT_REF_NAME}变量,可通过Git命令获取当前分支名,复用CI的替换脚本逻辑:
- 在项目根目录创建本地替换脚本
local_replace_version.sh:
#!/bin/bash # 获取当前Git分支名 PROJECT_VERSION=$(git rev-parse --abbrev-ref HEAD) # 执行与CI一致的替换操作 replace_proj ./src/www/themes/ "'local';" "'${PROJECT_VERSION}';"
- 给脚本添加执行权限:
chmod +x local_replace_version.sh
- 启动本地环境前运行该脚本,即可完成代码替换。
方案二:让PHP读取Docker环境变量
通过调整PHP容器配置,允许环境变量传递到PHP进程:
针对php-fpm容器
- 修改php-fpm配置文件(通常为
www.conf或php-fpm.conf):
# 将默认的yes改为no,保留系统环境变量 clear_env = no
- 在
local.yml中配置环境变量:
services: web: environment: PROJECT_VERSION: ${PROJECT_VERSION} php: environment: PROJECT_VERSION: ${PROJECT_VERSION}
- 启动容器前,在终端导出当前Git分支名到环境变量:
export PROJECT_VERSION=$(git rev-parse --abbrev-ref HEAD) docker-compose -f local.yml up -d
- 在PHP中通过
getenv('PROJECT_VERSION')或$_ENV['PROJECT_VERSION']获取变量值。
针对Apache容器(若用Apache运行PHP)
- 在Apache虚拟主机配置中添加环境变量传递指令:
<VirtualHost *:80> # 其他配置... passenv PROJECT_VERSION </VirtualHost>
- 后续步骤同php-fpm方案的2-4步,即可让PHP读取到环境变量。
内容的提问来源于stack exchange,提问作者Edouard LOISEAU
相关产品推荐
相关产品推荐

