firebase - 部署到特定的子域。使用命令行 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个?
解决方案
经过一番挖掘,发现您实际上可以在 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成员可以解释两者之间是否有区别?
推荐阅读
- xamarin.forms - Xamarin 表单 webview 未在我的设备中显示图表数据
- css - SASS:在应用程序之间共享
- android - Firebase 记录存在但无法从数据库中检索数据
- css - 如何检查浏览器是否支持-webkit-text-stroke
- php - Wordpress wp_create_user 错误 502 网关错误
- google-cloud-platform - 在云端调度 GPU 以训练深度学习模型
- javascript - 谷歌地图中未显示多个标记
- sql - SQL Server 2008,将浮点数转换为字符串
- deep-learning - CNN中如何选择卷积层数和滤波器数
- python - 在 pandas 中使用混合日期时间格式