0

我正在尝试使用 GitHub CI/CD 将我的 Django API 部署到 Google App Engine,但是我遇到了一个奇怪的错误,它在我的deploy工作中没有提供任何堆栈跟踪。我build的单元测试和代码覆盖率工作通过了。

main.yaml

name: Python application

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

defaults:
  run:
    working-directory: src

jobs:
  build:

    runs-on: ubuntu-latest

    services:
      postgres:
        image: postgres:10.8
        env:
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: postgres
          POSTGRES_DB: github_actions

        ports:
          - 5433:5432

        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5

    steps:
    - uses: actions/checkout@v2
    - name: Set up Python 3.9
      uses: actions/setup-python@v2
      with:
        python-version: 3.9
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
    - name: Test with Unittest
      env:
        SECRET_KEY: ${{ secrets.SECRET_KEY }}
        DB_NAME: ${{ secrets.DB_NAME }}
        DB_USER: ${{ secrets.DB_USER }}
        DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
        DB_HOST: ${{ secrets.DB_HOST }}
        DB_PORT: ${{ secrets.DB_PORT }}
        DB_ENGINE: ${{ secrets.DB_ENGINE }}
      run: |
        coverage run manage.py test && coverage report --fail-under=75 && coverage xml
        mv coverage.xml ../
    - name: Report coverage to Codecov
      env:
        SECRET_KEY: ${{ secrets.SECRET_KEY }}
        DB_NAME: ${{ secrets.DB_NAME }}
        DB_USER: ${{ secrets.DB_USER }}
        DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
        DB_HOST: ${{ secrets.DB_HOST }}
        DB_PORT: ${{ secrets.DB_PORT }}
        DB_ENGINE: ${{ secrets.DB_ENGINE }}
      uses: codecov/codecov-action@v1
      with:
        token: ${{ secrets.CODECOV_TOKEN }}
        files: ./coverage.xml
        directory: ./coverage/reports/
        fail_ci_if_error: true

  deploy:

    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Deploy to App Engine
        id: deploy
        uses: google-github-actions/deploy-appengine@v0.2.0
        with:
          project_id: ${{ secrets.GCP_PROJECT_ID }}
          deliverables: app.yaml
          credentials: ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }}
          version: v1
      - name: Test
        run: curl "${{ steps.deploy.outputs.url }}

应用程序.yaml

runtime: python39

instance_class: B1
service: deploy
basic_scaling:
  max_instances: 1
  idle_timeout: 10m

这是我得到的两个错误: 在此处输入图像描述

我还在app.yaml中遇到另一个奇怪的错误,导致工作流无法运行。我从该文件的 Google App Engine 文档中认为我们不需要包含on触发器。我不确定这是否是由main.yaml.

有没有简单的方法来解决这个错误?

更新:在尝试v0.4.0了 GitHub Action 之后,我得到了同样的错误,但我发现是我GOOGLE_APPLICATION_CREDENTIALS导致了错误。

{
    "type": "service_account",
    "project_id": "***",
    "private_key_id": "***",
    "private_key": "-----BEGIN PRIVATE KEY-----***=\n-----END PRIVATE KEY-----\n",
    "client_email": "***@appspot.gserviceaccount.com",
    "client_id": "***",
    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
    "token_uri": "https://oauth2.googleapis.com/token",
    "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
    "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/***%40appspot.gserviceaccount.com"
}

我用 替换了所有私人信息***,但 JSON 绝对仍然有效。

4

0 回答 0