如何在GitHub Actions部署中添加工作目录

6

我最近开始使用GitHub Actions,我的目标是在进行推送时将React项目托管在Firebase上。我使用GitHub Actions来完成这个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安装和项目构建时设置了工作目录。但是在部署过程中,我一直收到这个错误:
https://istack.dev59.com/O535D.webp 所以我理解的是,这个错误是由于工作目录问题引起的。因此,我的当前项目结构如下:
. (root of my GitHub repository)
└── my-app
    ├── firebase.json   <-- Git Hub action must point to this sub-dir
└── my-app-mobile
    ├── packages.json

那么在我的 Firebase 部署过程中我应该如何做到这一点?如果我的问题是错误的,那么可能出现什么问题和答案是什么呢?似乎我不能在 uses: 中使用 working-directory: ./my-app


为什么不再次使用 working-directory: ./my-app - jonrsharpe
1
it can't be used with 'uses' - Shehan Dhaleesha
1个回答

8
我查看了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 }}

如果这不起作用,另一种选择是fork w9jds/firebase-action并在此处的entrypoint.sh脚本中添加PROJECT_PATH参数: https://github.com/w9jds/firebase-action/blob/master/entrypoint.sh 更新:我提出了一个PR来向w9jds/firebase-action添加一个PROJECT_PATH参数。现在你可以按以下方式使用该操作。
      - name: Deploy to Firebase
        uses: w9jds/firebase-action@master
        with:
          args: deploy --only hosting
        env:
          FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
          PROJECT_PATH: ./my-app

1
@jonrsharpe 这是因为你不能在 env 部分评估表达式。 - peterevans
所以给出的解决方案不起作用,感谢您提供这样的解释。您能告诉我如何使用分叉存储库设置PROJECT_PATH,并在GitHub操作中使用它吗?至少我也要尝试一下。 - Shehan Dhaleesha
我已经更新了解决方案,说明如何在分支版本中添加项目路径参数。 - peterevans
1
所以现在我遇到的错误是 -> “错误:指定的公共目录'build'不存在,无法将托管部署到站点my-app”。 - Shehan Dhaleesha
@ShehanDhaleesha 我提交了一个 PR 来添加 PROJECT_PATHw9jds/firebase-action。如果你仍在使用我的分支,请切换回原作者的 action。 - peterevans
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接