已定义GitHub Vars/Secrets但CI工作流无法识别,Docker镜像推送失败
GitHub Actions无法读取环境中配置的Vars和Secrets的解决方法
问题背景
已在GitHub仓库的特定环境中配置了DOCKERHUB_USERNAME(仓库变量)和DOCKERHUB_TOKEN(仓库密钥),但执行CI工作流时,检查步骤显示这两个变量均未被识别,导致工作流执行失败。
工作流代码
name: CI Pipeline on: push: branches: - main pull_request: branches: - main permissions: contents: read jobs: docker: name: Docker Build & Push runs-on: ubuntu-latest steps: - name: Check secrets availability run: | echo "🔍 Checking secrets..." if [ -z "${{ vars.DOCKERHUB_USERNAME }}" ]; then echo "❌ DOCKERHUB_USERNAME is not set" else echo "✅ DOCKERHUB_USERNAME is available" fi if [ -z "${{ secrets.DOCKERHUB_TOKEN }}" ]; then echo "❌ DOCKERHUB_TOKEN is not set" else echo "✅ DOCKERHUB_TOKEN is available" fi
执行结果
🔍 Checking secrets... ❌ DOCKERHUB_USERNAME is not set ❌ DOCKERHUB_TOKEN is not set Error: Process completed with exit code 1.
环境配置截图


问题原因
你将DOCKERHUB_USERNAME和DOCKERHUB_TOKEN配置在了仓库的特定环境中,但工作流的job并未指定使用该环境,导致GitHub Actions无法加载对应环境下的变量和密钥。
解决方案
在工作流的docker job中添加environment字段,指定你配置变量的环境名称(需与GitHub中设置的环境名完全一致,区分大小写)。
修改后的工作流代码
name: CI Pipeline on: push: branches: - main pull_request: branches: - main permissions: contents: read jobs: docker: name: Docker Build & Push runs-on: ubuntu-latest # 指定配置了变量的环境名称,替换为你实际的环境名 environment: production steps: - name: Check secrets availability run: | echo "🔍 Checking secrets..." if [ -z "${{ vars.DOCKERHUB_USERNAME }}" ]; then echo "❌ DOCKERHUB_USERNAME is not set" else echo "✅ DOCKERHUB_USERNAME is available" fi if [ -z "${{ secrets.DOCKERHUB_TOKEN }}" ]; then echo "❌ DOCKERHUB_TOKEN is not set" else echo "✅ DOCKERHUB_TOKEN is available" fi
额外说明
- 若你的变量是在仓库全局(而非环境级)配置的,则无需添加
environment字段 - 若工作流由
pull_request触发,且目标环境设置了保护规则(如必需审批),则需要先完成审批才能访问环境中的密钥 - 确保环境名称拼写完全匹配,大小写敏感
内容的提问来源于stack exchange,提问作者Mister Balise
相关产品推荐
相关产品推荐

