部署到特定的子域使用命令行 firebase 托管或指定要使用的 json

问题描述

我在带有一些子域的 Firebase 托管上有一个开发和生产环境。

我在 gitlab 上的 CI/CD 可以在 dev 和 prod 上部署,具体取决于合并的分支(dev 用于 dev env 或 master 用于 prod)

我在 gitlab CI 中使用它:

script:
    - npm install -g firebase-tools
    - yarn
    - yarn build-dev
    - firebase use env-dev --token $FIREBASE_TOKEN
    - firebase deploy -m "Pipe $CI_PIPELINE_ID Build $CI_BUILD_ID" --only hosting --non-interactive --token $FIREBASE_TOKEN

对于 prod,我只需要更改为使用 env-prod,它将毫无问题地部署到主域

现在对于子域,它们需要在 firebase.json 中使用:

{
  "hosting": {
    "site": "myproject-dashboard-prod",// can be also myproject-dashboard-dev for dev env
    "public": "dist","ignore": ["firebase.json","**/.*","**/node_modules/**"],"rewrites": [
      {
        "source": "**","destination": "/index.html"
      }
    ]
  }
}

我的问题是,google 网站上的 hsoting API 参考在哪里?我很难找到它 因为我希望有一种方法可以直接规定到 firebase 命令中,如果谷歌允许的话,我的想法是这样的:

 - firebase deploy -m "Pipe $CI_PIPELINE_ID Build $CI_BUILD_ID" --only hosting --non-interactive --token $FIREBASE_TOKEN --site myproject-dashboard-dev

这将解决我从自动化 CI/CD 部署的问题,否则我不知道如何在 json 对象中使站点动态(module.export 在这种情况下不起作用,因为它不是导入而是读取直接通过 firebase 命令)或者也许有一种方法可以确定 firebase 命令应该使用哪个 json,我可以制作其中的 2 个?

解决方法

经过一番挖掘,发现您实际上可以在 firebase.json 中使用数组,并确定应在命令行中使用哪些设置,因此您可以像这样在子域上部署到 2 env:

-firebase.json :

{
  "hosting": [
    {
      "site": "mydomain-subdomain-prod","public": "dist","ignore": ["firebase.json","**/.*","**/node_modules/**"],"rewrites": [
        {
          "source": "**","destination": "/index.html"
        }
      ]
    },{
      "site": "mydomain-subdomain-dev","destination": "/index.html"
        }
      ]
    }
  ]
}

-.gitlab-ci.yml

dev:
  stage: deploy
  only:
    - dev
  script:
    - npm install -g firebase-tools
    - yarn
    - yarn build-dev
    - firebase use mydomain-dev --token $FIREBASE_TOKEN
    - firebase deploy -m "Pipe $CI_PIPELINE_ID Build $CI_BUILD_ID" --only hosting:mydomain-subdomain-dev --non-interactive --token $FIREBASE_TOKEN

prod:
  stage: deploy
  only:
    - master
  script:
    - npm install -g firebase-tools
    - yarn
    - yarn build-prod
    - firebase use mydomain-prod --token $FIREBASE_TOKEN
    - firebase deploy -m "Pipe $CI_PIPELINE_ID Build $CI_BUILD_ID" --only hosting:mydomain-subdomain-prod --non-interactive --token $FIREBASE_TOKEN

这是关联的 firebase documentation

看起来站点和目标是一回事,如果firebase成员可以解释两者之间是否存在差异?

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...