首页 > 解决方案 > 部署到特定的子域。使用命令行 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"
      }
    ]
  }
}

我的问题是,谷歌网站上的 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个?

标签: firebasefirebase-hostingfirebase-cli

解决方案


经过一番挖掘,发现您实际上可以在 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",
      "public": "dist",
      "ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
      "rewrites": [
        {
          "source": "**",
          "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文档

看起来站点和目标是同一件事,如果firebase成员可以解释两者之间是否有区别?


推荐阅读