如何在GitHub动作中将工作目录添加到部署

时间:2019-10-12 08:44:02

标签: firebase github github-actions

我最近搬到了GitHub上,所以我要做的是在完成推送后将我的react项目托管在firebase中。我将GitHub动作用于此CI / CD流程。这是我现在拥有的main.yml。

name: Build and Deploy
on:
  push:
    branches:
      - master

jobs:
  build:
    name: Build
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Repo
        uses: actions/checkout@master
      - name: Install Dependencies
        working-directory: ./my-app
        run: npm install
      - name: Build
        working-directory: ./my-app
        run: npm run build

  deploy:
    name: Deploy
    needs: build
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Repo
        uses: actions/checkout@master      
      - name: Deploy to Firebase
        uses: w9jds/firebase-action@master
        with:
          args: deploy --only hosting
        env:
          FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}

在npm安装和项目构建时,我设法以某种方式设置工作目录。但是在部署过程中,我不断收到此错误,

enter image description here

所以我知道的是,由于工作目录问题而发生此错误。所以我当前的项目结构是这样的。

. (root of my GitHub repository)
└── my-app
    ├── firebase.json   <-- Git Hub action must point to this sub-dir
└── my-app-mobile
    ├── packages.json

那么我应该如何在Firebase部署过程中做到这一点?如果我对这个问题错了,那是什么问题和答案?看来我不能将working-directory: ./my-appuses:一起使用

1 个答案:

答案 0 :(得分:1)

我查看了Firebase CLI的文档,但没有找到通过CLI参数设置firebase.json路径的任何方法。但是,有一个环境变量存储根目录。不过,它是在predeploypostdeploy钩子的上下文中,所以我不确定CLI是否会尊重它。

  

$ PROJECT_DIR —包含firebase.json的根目录

https://firebase.google.com/docs/cli#environment_variables

您使用的w9jds/firebase-action只是CLI的包装。我不确定这是否行得通,但您可以尝试按以下方式设置项目目录。在单独的步骤中设置变量的原因是因为您无法在env节中求值表达式。有关更多详细信息,请参见this answer。像w9jds/firebase-action这样的容器操作将有权访问变量,而无需直接通过env传递变量。

      - name: Set project dir environment var
        run: echo ::set-env name=PROJECT_DIR::"$GITHUB_WORKSPACE/my-app"
      - name: Deploy to Firebase
        uses: w9jds/firebase-action@master
        with:
          args: deploy --only hosting
        env:
          FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}

如果这不起作用,另一种方法是派生w9jds/firebase-action并在此处向entrypoint.sh脚本中添加一个PROJECT_PATH参数: https://github.com/w9jds/firebase-action/blob/master/entrypoint.sh

更新I raised a PRPROJECT_PATH参数添加到w9jds/firebase-action。现在,您可以按以下方式使用操作。

      - name: Deploy to Firebase
        uses: w9jds/firebase-action@master
        with:
          args: deploy --only hosting
        env:
          FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
          PROJECT_PATH: ./my-app