GitHub Action中Django无法读取环境变量问题求助
问题解决:GitHub Action中无法读取Django环境变量
核心原因
你在GitHub项目设置里配置的Secrets不会自动成为Action运行环境中的环境变量,必须在Workflow配置文件中显式传递这些Secrets到环境变量中,才能被django-environ读取。
解决方案
方法1:在Workflow中直接传递Secrets为环境变量
修改你的django.yml,通过全局env块将Secrets映射为环境变量,所有步骤均可访问:
name: Django CI on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: ubuntu-latest strategy: max-parallel: 4 matrix: python-version: [3.7, 3.8, 3.9] # 定义全局环境变量,关联GitHub Secrets env: POSTGRES_DB_NAME: ${{ secrets.POSTGRES_DB_NAME }} POSTGRES_USER: ${{ secrets.POSTGRES_USER }} POSTGRES_PASSWORD: ${{ secrets.POSTGRES_PASSWORD }} POSTGRES_HOST: ${{ secrets.POSTGRES_HOST }} POSTGRES_PORT: ${{ secrets.POSTGRES_PORT }} steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v3 with: python-version: ${{ matrix.python-version }} - name: Install Dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt - name: Run Tests run: | python manage.py test
方法2:在Action中生成临时.env文件
如果想保持和本地一致的读取逻辑(通过.env文件),可以在Workflow中创建临时.env文件,用Secrets填充内容:
name: Django CI on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: ubuntu-latest strategy: max-parallel: 4 matrix: python-version: [3.7, 3.8, 3.9] steps: - uses: actions/checkout@v3 # 生成临时.env文件 - name: Create .env file run: | echo "POSTGRES_DB_NAME=${{ secrets.POSTGRES_DB_NAME }}" >> .env echo "POSTGRES_USER=${{ secrets.POSTGRES_USER }}" >> .env echo "POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }}" >> .env echo "POSTGRES_HOST=${{ secrets.POSTGRES_HOST }}" >> .env echo "POSTGRES_PORT=${{ secrets.POSTGRES_PORT }}" >> .env - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v3 with: python-version: ${{ matrix.python-version }} - name: Install Dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt - name: Run Tests run: | python manage.py test
验证要点
- 确认GitHub Secrets的名称和代码中使用的变量名完全一致(大小写敏感)
- 检查Workflow中Secrets的引用语法是否正确:
${{ secrets.YOUR_SECRET_NAME }}
内容的提问来源于stack exchange,提问作者Maruf Khan
相关产品推荐
相关产品推荐

