Google 云构建不替换 firebase 令牌的环境变量

2024-01-04

我有一个云构建触发器,尝试将我的应用程序推送到 firebase 托管。为此,我有一个加密的 .env.enc 文件,其中包含部署所需的 firebase 令牌。在构建过程中,我解密了该文件并尝试部署,但遇到了未经授权的消息。

我尝试在部署脚本中对令牌进行硬编码,而不是使用环境变量,并且部署得很好。

这是我的 cloudbuild.yaml

steps:
- name: gcr.io/cloud-builders/gcloud
  args:
  - kms
  - decrypt
  - --ciphertext-file=.env.enc
  - --plaintext-file=.env
  - --location=global
  - --keyring=ssr-vue-docker-app
  - --key=cloudbuild-env
# Install
- name: 'gcr.io/cloud-builders/npm'
  args: ['install']
# Test
- name: 'gcr.io/cloud-builders/npm'
  args: ['run', 'test']
# Build
- name: 'gcr.io/cloud-builders/npm'
  args: ['run', 'build']
# Deploy
- name: 'gcr.io/cloud-builders/npm'
  args: ['run', 'deploy']

最后的部署步骤使用解密的 .env 文件中使用的环境变量调用 package.json 中的 npm 脚本。

"deploy": "firebase deploy --debug --token \"$FIREBASE_TOKEN\"

我得到的初始输出表明该令牌未被使用,但也可以从最终日志中进行编辑。

Step #4: [2019-04-17T21:14:48.087Z] Command: /usr/local/bin/node /workspace/node_modules/.bin/firebase deploy --debug --token= --only=hosting

这是我在尝试部署时收到的错误。

Step #4: Error: HTTP Error: 403, The caller does not have permission
Step #4: 
Step #4: [2019-04-17T21:14:48.531Z] <<< HTTP RESPONSE BODY code=403, message=The caller does not have permission, status=PERMISSION_DENIED
Step #4: [2019-04-17T21:14:48.530Z] <<< HTTP RESPONSE 403 vary=X-Origin, Referer, Origin,Accept-Encoding, content-type=application/json; charset=UTF-8, date=Wed, 17 Apr 2019 21:14:48 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, accept-ranges=none, transfer-encoding=chunked
Step #4: rewrites=[glob=**, region=us-central1, serviceId=nuxt-server], deployment-tool=cli-firebase
Step #4: [2019-04-17T21:14:48.337Z] >>> HTTP REQUEST POST https://firebasehosting.googleapis.com/v1beta1/sites/ssr-vue-docker-app/versions 
Step #4: i deploying hosting
Step #4: 
Step #4: === Deploying to 'ssr-vue-docker-app'...

如果正在使用环境变量,关于如何调试有什么建议吗?或者我的构建步骤中是否缺少一些允许我使用 .env 文件中的环境变量的内容?

我尝试遵循本指南:https://fireship.io/lessons/ci-cd-with-google-cloud-build/ https://fireship.io/lessons/ci-cd-with-google-cloud-build/。 我似乎看不到我在这里缺少什么,因此非常感谢任何帮助。


构建 firebase Docker 镜像。

See:

  • https://github.com/GoogleCloudPlatform/cloud-builders-community https://github.com/GoogleCloudPlatform/cloud-builders-community
$ git clone https://github.com/GoogleCloudPlatform/cloud-builders-community
$ cd firebase
$ gcloud builds submit --config cloudbuild.yaml .

加密 ci 令牌

$ firebase login:ci
$ gcloud kms keyrings create cloudbuilder --location global
$ gcloud kms keys create firebase-token --location global --keyring cloudbuilder --purpose encryption
$ echo -n <ciToken> | gcloud kms encrypt \
  --plaintext-file=- \
  --ciphertext-file=- \
  --location=global \
  --keyring=cloudbuilder \
  --key=firebase-token | base64

在 cloudbuild.yaml 中设置加密的 ci 令牌

See:

  • https://cloud.google.com/cloud-build/docs/secure-builds/use-encrypted-secrets-credentials?hl=ja#example_build_request_using_an_encrypted_variable https://cloud.google.com/cloud-build/docs/securing-builds/use-encrypted-secrets-credentials?hl=ja#example_build_request_using_an_encrypted_variable
  • https://github.com/GoogleCloudPlatform/cloud-builders-community/blob/master/firebase/firebase.bash#L5 https://github.com/GoogleCloudPlatform/cloud-builders-community/blob/master/firebase/firebase.bash#L5
  • https://github.com/firebase/firebase-tools#user-content-using-with-ci-systems https://github.com/firebase/firebase-tools#user-content-using-with-ci-systems
secrets:
- kmsKeyName: projects/<projectName>/locations/global/keyRings/cloudbuilder/cryptoKeys/firebase-token
  secretEnv:
    FIREBASE_TOKEN: <EncryptedCiToken>
steps:
- id: 'npm install'
  name: 'gcr.io/cloud-builders/npm'
  args: ['install']

- id: 'functions npm install'
  name: 'gcr.io/cloud-builders/npm'
  args: ['install']
  dir: 'functions'

- id: "deploy firebase"
  name: 'gcr.io/$PROJECT_ID/firebase'
  args: ['deploy', '--project=<projectName>']

# Deploy specific Firebase services
# (If you only want to deploy specific Firebase services or features)
#
# - id: "deploy firebase"
#   name: 'gcr.io/$PROJECT_ID/firebase'
#   args: ['deploy', '--only', 'functions', '--project=<projectName>']
# 
# - id: "deploy firebase storage"
#   name: 'gcr.io/$PROJECT_ID/firebase'
#   args: ['deploy', '--only', 'storage', '--project=<projectName>']
#   secretEnv: ['FIREBASE_TOKEN']
# 
# - id: "deploy firebase firestore"
#   name: 'gcr.io/$PROJECT_ID/firebase'
#   args: ['deploy', '--only', 'firestore', '--project=<projectName>']
#   secretEnv: ['FIREBASE_TOKEN']
# 
# - id: "deploy firebase hosting"
#   name: 'gcr.io/$PROJECT_ID/firebase'
#   args: ['deploy', '--only', 'hosting', '--project=<projectName>']

更多信息

  • https://github.com/zkohi/firebase-sub-guides/blob/master/content/docs/ja/cd/index.md https://github.com/zkohi/firebase-sub-guides/blob/master/content/docs/ja/cd/index.md
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google 云构建不替换 firebase 令牌的环境变量 的相关文章

随机推荐

  • Android:如何创建启动器

    我以前从未开发过 Android 所以当你回答时请认为我 100 愚蠢 我想创建一个应用程序启动器 它将打开默认的 Web 浏览器到给定的 URL 换句话说 我想用我的网站徽标制作一个图标 当您单击它时 它会在您的默认网络浏览器中打开该网站
  • Html Agility Pack/C#:如何创建/替换标签?

    任务很简单 但我找不到答案 使用 Node Remove 可以轻松删除标签 节点 但是如何替换它们呢 有一个 ReplaceChild 方法 但它需要创建一个新标签 如何设置标签的内容 InnerHtml 和 OuterHtml 是只读属性
  • EF Code First 中自引用外键的语法是什么?

    我正在尝试将外键从 SpouseId 引用到 Contact 表中的 Id 执行此操作的语法是什么 我似乎找不到例子 谢谢 我有一堂这样的课 public class Contact public int Id get set public
  • 在矩阵中查找从左上角到右下角的路径时遇到问题吗?

    我有一个20x30充满随机数的矩阵 0 1 2 我需要找到一条仅由 1 组成的路径 从左上角开始到右下角结束 我需要帮助找到 1 的路径 另外 如何打印我所踏过的每个数字的坐标 我可以显示我所踏过的数字 但在显示其坐标时遇到问题 这是我当前
  • 使用 tostring 聚合字符串并在 r 中对它们进行计数

    应用 dplyr 代码后我得到了以下数据框 Final df lt df gt group by clientID month gt summarise test toString Sector gt as data frame 这给了我以
  • 编辑巨大的sql数据文件

    我有一个 23GB 的文件 我想编辑第 23 行 但服务器上只有 200 MB 可用 RAM 我不想完全打开该文件 因为我只剩下 20GB 可用磁盘空间 我怎样才能做到这一点 我尝试使用 head tail sed 但它似乎创建了一个临时文
  • 具有动态功能的即时应用程序始终显示带有 1 个选项的消歧对话框

    我正在尝试动态功能和即时应用程序 为了在各种功能之间导航 我使用深层链接 每次我导航到另一个 Activity 时 我都会看到消歧对话框 时间不到 1 秒 其中列出了 1 个应用程序 请注意 一次 和 始终 荷兰语 选项是如何变灰的 示例
  • 从 Node 到 Postgres DB 的查询不是 UTF8

    对于一个项目 我确实必须用 JS Node 编写一个服务器 该服务器从 Windows 计算机上的数据库 Postgres 返回元素 一切都 工作正常 连接正常并且返回元素 但是 我确实遇到了编码问题 我的元素是法语的 因此 服务器无法正确
  • 如何在 CasperJS 中禁用 css?

    我知道如何禁用图像和插件 但 CasperJS 中似乎没有禁用 css 的明显选项 有人知道这是如何运作的吗 假设您想禁止加载所有外部样式表 您可以通过中止加载 css 文件的请求来实现 这是通过将函数分配给options onResour
  • Bootstrap 4 导航链接悬停效果

    我试图仅针对导航栏中的 a 链接 而不是正斜杠 放置悬停效果 但我似乎无法只访问 a 链接 效果最终会沿着整个导航栏运行 这里似乎与 Bootstrap 4 有冲突 HTML
  • “区域”之间的 ASP.NET MVC `Html.ActionLink`

    我已向我的 MVC3 项目添加了一个新区域 并且我正在尝试从 Layout 页面链接到新区域 我添加了一个名为 Admin 的区域 其中有一个控制器 Meets 我使用 Visual Studio 设计器添加区域 以便它具有正确的区域注册类
  • 如何使用.Net Core编写Linux守护进程

    我可以编写一个长时间运行的 CLI 应用程序并运行它 但我假设它不会满足人们对符合标准的 Linux 守护进程的所有期望 响应 SIGTERM 由 System V init 进程启动 忽略终端 I O 信号 etc https www p
  • 如何在apollo链接中返回错误响应?

    我在模式拼接中使用阿波罗链接作为访问控制层 我不太确定如果用户没有访问特定操作的权限 如何使链接返回错误响应 我知道这样的包graphql shield and graphql middleware但我很好奇是否可以使用 apollo li
  • Git:如何在预提交挂钩中重新暂存暂存文件

    我正在写一个 git 预提交钩子 该脚本可以重新格式化一些代码 因此它可以修改暂存文件 如何重新暂存所有已暂存的文件 如果没有pre commit hook上下文 你可以获取暂存文件的列表 https stackoverflow com q
  • exit().remove() 在节点离开视图时不会删除它

    我正在使用 d3js 相对于当前时间从右向左移动圆点 我有几个问题 1 exit remove 不起作用 节点一旦离开视图就不会被删除 2 圆圈的过渡有点跳跃 var circles g selectAll path circles dat
  • python/django 中 setattr 和对象操作之间的区别

    我有以下模型 class Ticket models Model title models CharField merged to models ForeignKey self related name merger ticket null
  • 如何使用 Google Tink 创建对称加密密钥?

    我有一个密钥 例如 thisist0psecret 我想将其用作对称加密 解密密钥谷歌 Tink 库 https github com google tink 我很困惑我无法做到这一点简单的事情 我可以生成new keys 使用各种模板AE
  • 将静态 JSON 添加到 Android Studio 项目

    我想将静态 JSON 添加到 Android Studio 项目中 然后可以在整个项目中引用它 有谁知道这样做的最佳方法 更详细地说 我想做的是 1 从 Google Places API 中提取数据 2 查找与静态 JSON 对象中的地点
  • rsync git 大存储库

    我正在尝试将 git 存储库克隆到我的本地计算机上 但它说 malloc failed 因为存储库太大了 有谁知道我可以用来复制目录的确切 rsync 命令 或者我还能做些什么来克隆一个大存储库 我尝试了 rsync 但出现以下错误 Inv
  • Google 云构建不替换 firebase 令牌的环境变量

    我有一个云构建触发器 尝试将我的应用程序推送到 firebase 托管 为此 我有一个加密的 env enc 文件 其中包含部署所需的 firebase 令牌 在构建过程中 我解密了该文件并尝试部署 但遇到了未经授权的消息 我尝试在部署脚本