GitHub Actions for Firebase
此操作可用于 firebase-tools,支持使用 firebase
命令行客户端执行任意操作。
如果您需要更灵活的实现方式,可以在此处找到一个重写的早期版本: setup-firebase,它允许您选择 node 和 java 版本,并运行多个命令。
输入
args
- 必填。这是您想要对firebase
CLI 使用的参数
输出
响应已被删除,因为它在 bash 脚本中造成了许多问题
环境变量
-
GCP_SA_KEY
- 如果未设置 FIREBASE_TOKEN,则必填。一个 普通 的服务帐户密钥(JSON 格式)或者 Base64 编码 的服务帐户密钥,具有您尝试部署/更新所需的权限。- 由于服务帐户在部署过程中使用 App Engine 默认服务帐户,因此还需要
Service Account User
角色。 - 如果部署函数,您还需要
Cloud Functions Developer
角色。- 如果部署有计划的函数,包括
Cloud Scheduler Admin
角色。 - 如果部署需要访问机密,包括
Secret Manager Viewer
角色。 - 如果更新 Firestore 规则,包括
Firebase Rules Admin
角色。 - 如果项目使用阻止函数(beforeCreate 或 beforeSignin),包括
Firebase Functions Admin
角色。
- 如果部署有计划的函数,包括
- 如果更新 Firestore 索引,包括
Cloud Datastore Index Admin
角色。 - 如果部署主机文件,包括
Firebase Hosting Admin
角色。 - 更多详细信息: https://firebase.google.com/docs/hosting/github-integration
- 由于服务帐户在部署过程中使用 App Engine 默认服务帐户,因此还需要
-
FIREBASE_TOKEN
- 如果未设置 GCP_SA_KEY,则必填。 此方法将被弃用,请改用GCP_SA_KEY
。用于身份验证的令牌。此令牌可通过firebase login:ci
命令获取。 -
GOOGLE_APPLICATION_CREDENTIALS
- 如果未设置 GCP_SA_KEY 或 FIREBASE_TOKEN,则必填。凭证 JSON 文件的位置。更多详情: https://cloud.google.com/docs/authentication/application-default-credentials#GAC -
PROJECT_ID
- 可选。指定要为所有命令使用的特定项目。如果您在.firebaserc
文件中指定了一个项目,则不需要。如果使用此选项,需要为您的服务帐户授予Viewer
权限角色,否则操作将因认证错误而失败。 -
PROJECT_PATH
- 可选。包含firebase.json
的文件夹路径,如果它不在存储库的根目录下。例如:./my-app
。 -
CONFIG_VALUES
- 可选。Firebase 功能的配置值,通常使用firebase functions:config:set [value]
进行设置。示例:CONFIG_VALUES: stripe.secret_key=SECRET_KEY zapier.secret_key=SECRET_KEY
。
示例
要使用 Firebase 进行身份验证并部署到 Firebase Hosting:
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
run: npm install
- name: Build
run: npm run build-prod
- name: Archive Production Artifact
uses: actions/upload-artifact@master
with:
name: dist
path: dist
deploy:
name: Deploy
needs: build
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@master
- name: Download Artifact
uses: actions/download-artifact@master
with:
name: dist
path: dist
- name: Deploy to Firebase
uses: w9jds/firebase-action@master
with:
args: deploy --only hosting
env:
FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
或者:
env:
GCP_SA_KEY: ${{ secrets.GCP_SA_KEY }}
如果您有多个主机环境,可以在 args 行中指定要部署的环境。例如: args: deploy --only hosting:[environment name]
如果您想为部署添加一条消息(例如 Git 提交消息),您需要小心并转义引号,否则 YAML 会中断。
with:
args: deploy --message \"${{ github.event.head_commit.message }}\"
其他版本
从版本 v2.1.2 开始,每个版本发布都会指向一个版本化的 Docker 镜像,允许我们加强管道(以免在我做一些愚蠢的事情时中断)。除此之外,您还可以指向 master
版本,如果您想测试尚未部署到发行版的内容,可以使用这样的内容:
name: Deploy to Firebase
uses: docker://w9jds/firebase-action:master
with:
args: deploy --only hosting
env:
FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
许可证
此项目中的 Dockerfile 和相关脚本以及文档均采用 MIT 许可证发布。
建议
如果您决定为构建和部署创建单独的作业(这可能是明智的),那么请确保克隆您的存储库,因为 Firebase-cli 需要 Firebase 存储库来部署(特别是 firebase.json
)