如何在 GitHub 操作中将工作目录添加到部署
How to add working directory to deployment in 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 }}
而且我设法在 npm 安装和项目构建时设置了工作目录。但是在部署中我不断收到这个错误,
所以我的理解是,由于工作目录问题而发生此错误。所以我目前的项目结构是这样的。
. (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-app
与 uses:
一起使用
我查看了 firebase CLI 的文档,但没有看到任何通过 CLI 参数设置 firebase.json
路径的方法。但是,有一个存储根目录的环境变量。它在 predeploy
和 postdeploy
钩子的上下文中,所以我不确定 CLI 是否会尊重它。
$PROJECT_DIR — The root directory containing 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 }}
如果这不起作用,另一种方法是派生 w9jds/firebase-action
并在此处向 entrypoint.sh 脚本添加 PROJECT_PATH
参数:
https://github.com/w9jds/firebase-action/blob/master/entrypoint.sh
更新: I raised a PR 将 PROJECT_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
我最近进入了 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 }}
而且我设法在 npm 安装和项目构建时设置了工作目录。但是在部署中我不断收到这个错误,
所以我的理解是,由于工作目录问题而发生此错误。所以我目前的项目结构是这样的。
. (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-app
与 uses:
我查看了 firebase CLI 的文档,但没有看到任何通过 CLI 参数设置 firebase.json
路径的方法。但是,有一个存储根目录的环境变量。它在 predeploy
和 postdeploy
钩子的上下文中,所以我不确定 CLI 是否会尊重它。
$PROJECT_DIR — The root directory containing 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 }}
如果这不起作用,另一种方法是派生 w9jds/firebase-action
并在此处向 entrypoint.sh 脚本添加 PROJECT_PATH
参数:
https://github.com/w9jds/firebase-action/blob/master/entrypoint.sh
更新: I raised a PR 将 PROJECT_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