如何将GitHub Actions工作流环境变量传递至Docker容器?
解决GitHub Actions环境变量传递到React Docker容器的问题
问题说明
你在GitHub Actions工作流顶层设置了环境变量GITHUB_RUN_NUMBER,希望在React前端的Docker容器中通过console.log打印该值,但目前变量无法传递到容器中。
核心原因
- React项目(基于Create React App)要求可访问的环境变量必须以
REACT_APP_为前缀,否则构建时不会注入到应用中。 - 工作流中顶层环境变量的写法错误:
${github.run_number}未使用GitHub Actions的表达式语法,无法正确解析。 - 未通过Docker构建参数(
--build-arg)将工作流中的环境变量传递到镜像构建过程。
解决方案
1. 修正工作流顶层环境变量
将顶层的env部分修改为,添加REACT_APP_前缀并使用正确的表达式语法:
env: REACT_APP_GITHUB_RUN_NUMBER: ${{ github.run_number }}
2. 在Docker构建命令中传递构建参数
在Build_Demo任务的Build and Push Docker Image步骤中,更新docker build命令,添加--build-arg传递变量:
- name: Build and Push Docker Image env: CI_COMMIT_TAG: N-${{ github.run_number }} run: | sudo docker build -t $CI_REGISTRY/$CI_REGISTRY_REPOSITORY:$CI_COMMIT_TAG . \ -f ./deploy/Dockerfile \ --build-arg WEB_PRIVATE_KEY="$WEB_PRIVATE_KEY" \ --build-arg REACT_APP_GA_TRACKING_ID=$REACT_APP_GA_TRACKING_ID \ --build-arg REACT_APP_GITHUB_RUN_NUMBER=$REACT_APP_GITHUB_RUN_NUMBER docker push $CI_REGISTRY/$CI_REGISTRY_REPOSITORY:$CI_COMMIT_TAG
3. 修改Dockerfile接收构建参数
在你的./deploy/Dockerfile中添加以下内容,接收构建参数并设置为容器环境变量(确保React构建过程能读取到该变量):
# 接收构建参数 ARG REACT_APP_GITHUB_RUN_NUMBER # 将参数设置为容器环境变量,确保运行时和构建时都能访问 ENV REACT_APP_GITHUB_RUN_NUMBER=$REACT_APP_GITHUB_RUN_NUMBER # (如果你的Dockerfile中有构建命令,比如npm run build,此时变量会被React自动注入) RUN npm run build
4. 调整React代码中的变量名
将React代码中的打印语句修改为使用带前缀的变量名:
console.log(`Build number= ${process.env.REACT_APP_GITHUB_RUN_NUMBER}`)
补充说明
- 如果你的Dockerfile是多阶段构建,确保构建参数在执行
npm run build的阶段被定义和使用。 - 工作流中的
CI_REGISTRY和CI_REGISTRY_REPOSITORY变量需要提前定义(比如在步骤中设置或从ECR登录步骤的输出中获取),否则docker build命令会报错。
内容的提问来源于stack exchange,提问作者Eran
相关产品推荐
相关产品推荐

