Github Actions部署GAE时create-envfile生成.env文件未生效问题
问题成因
- Github Actions中每个Job运行在独立的临时实例中,不同Job的文件系统互不共享。你将生成
.env的逻辑放在单独的create-envfileJob中,生成的文件仅存在于该Job的运行环境,执行部署的buildJob完全无法访问该文件。 - 即使将生成
.env的步骤放在同一个Job中,也需要注意执行顺序:actions/checkout操作会拉取仓库代码覆盖当前工作目录,若先生成.env再执行代码拉取,生成的文件会被拉取操作覆盖。
解决方案
直接调整Workflow配置,将生成.env的步骤合并到buildJob中,放在代码拉取之后、部署操作之前即可。修改后的参考配置如下:
name: CI on: push: branches: [ deploy ] pull_request: branches: [ deploy ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Make envfile uses: SpicyPizza/create-envfile@v1 with: envkey_DEBUG: False envkey_DATABASE_URL: ${{ secrets.DATABASE_URL }} envkey_USER: ${{ secrets.USER }} envkey_PASSWORD: ${{ secrets.PASSWORD }} envkey_DATABASE_NAME: ${{ secrets.DATABASE_NAME }} file_name: .env - name: Initialize Google Cloud SDK uses: zxyle/publish-gae-action@master with: service_account_email: ${{ secrets.GCP_SA_EMAIL }} service_account_key: ${{ secrets.GCP_SA_KEY }} project_id: ${{ secrets.PROJECT_ID }} gae_variables: ${{ secrets.GAE_VARIABLES }} - name: Publish app to Google App Engine run: | gcloud auth activate-service-account ${{ secrets.GCP_SA_EMAIL }} --key-file=client-secret.json gcloud config set project ${{ secrets.PROJECT_ID }} gcloud -q app deploy app.yaml --promote
如果确实有跨Job传递文件的需求,也可以使用上传/下载制品的官方Action实现文件传输,但该场景下直接合并步骤成本最低,没有必要额外增加传输逻辑。
内容的提问来源于stack exchange,提问作者Akshat Khanna
相关产品推荐
相关产品推荐

