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

She*_*sha 5 github firebase github-actions

我最近开始使用 GitHub 操作,所以我想做的是在推送完成后在 firebase 中托管我的 React 项目。我在这个 CI/CD 过程中使用了 GitHub 操作。这是我现在拥有的 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 }}
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

所以我的理解是,这个错误是由于工作目录问题引起的。所以我目前的项目结构是这样的。

. (root of my GitHub repository)
??? my-app
    ??? firebase.json   <-- Git Hub action must point to this sub-dir
??? my-app-mobile
    ??? packages.json
Run Code Online (Sandbox Code Playgroud)

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

pet*_*ans 6

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

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

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

w9jds/firebase-action您使用的是就在CLI的包装。我不确定这是否可行,但您可以尝试如下设置项目目录。在单独的步骤中设置变量的原因是您无法在env部分中计算表达式。有关更多详细信息,请参阅此答案。容器操作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 }}
Run Code Online (Sandbox Code Playgroud)

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

更新: 我提出了一个 PRPROJECT_PATHw9jds/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
Run Code Online (Sandbox Code Playgroud)