Google Cloud 运行 - 运行 Shell firebase 项目中的脚本
Google Cloud Run - Run Shell Script in firebase project
我是 google cloud-运行 的新手,我希望在 firebase 项目中实现 运行 脚本以更新配置(env 变量)
流程如下
调用 firebase 函数-> 将参数 (bar, baz) 传递到云中 运行 -> 运行 脚本 firebase functions:config:set foo.bar=baz
我所做的是创建一个由 cloud-builders-community 共享的 firebase-tools 图像,下面是代码
// cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/$PROJECT_ID/firebase', '.']
images:
- 'gcr.io/$PROJECT_ID/firebase'
tags: ['cloud-builders-community']
下面是 Dockerfile
//Dockerfile
FROM node
RUN npm i -g firebase-tools
ADD firebase.bash /usr/bin
RUN chmod +x /usr/bin/firebase.bash
ENTRYPOINT [ "/usr/bin/firebase.bash" ]
所以从这里开始,我想知道如何编写 运行 脚本。
任何想法或建议将不胜感激。
云 运行 允许您托管响应 HTTP 请求的容器。
在您的设计中,您是如何设法调用您的容器的? ... 是的,您没有定义任何端点。
我为一个开源项目做出了贡献,我发现了一个可以自动为您服务的工具 bash 脚本作为 http 端点。看看这个 Dockerfile. It use the tool shell2http
对于您的情况,我建议您使用这样的 Dockerfile:
FROM node
RUN npm i -g firebase-tools
ADD my_script.sh /
COPY --from=msoap/shell2http /app/shell2http /shell2http
RUN chmod +x my_script.sh
ENTRYPOINT ["/shell2http","-export-all-vars"]
CMD ["/update","/my_script.sh"]
根据查询参数将您的 my_script.sh
写入 运行 您想要的 bash 命令。
工作示例my_script.sh
#!/bin/sh
firebase --version
并且,在构建容器并将其部署到云 运行 后,调用 https://myservice.....run.app/update?<your env var>
编辑
对于 Firebase 身份验证,您有 2 种解决方案,但在详细介绍之前,您必须按照说明生成刷新令牌 here
- 使用环境变量传递您的令牌。它不是最安全的,因为您的令牌以纯文本形式存入云端 运行 env var.
像这样部署您的服务
gcloud run deploy --image=... --set-env-vars=TOKEN=<tokenValue>
并像这样构建您的 my_script.sh
文件
#!/bin/sh
firebase --token $TOKEN <command>
- 使用secret manager。它更安全,但需要做更多的事情。首先将您的 firebase 刷新令牌保存到秘密管理器
echo "<tokenContent>" | gcloud beta secrets create --replication-policy=automatic --data-file=- myFirebaseToken
因为需要使用gcloud,所以我改变了创建容器的方式。因此这里是新容器
FROM google/cloud-sdk
RUN apt-get update && apt-get install -y nodejs npm
RUN echo $(npm i -g firebase-tools)
RUN node -v
ADD my_script.sh /
COPY --from=msoap/shell2http /app/shell2http /shell2http
RUN chmod +x my_script.sh
ENTRYPOINT ["/shell2http","-export-all-vars"]
CMD ["/update","/my_script.sh"]
2条备注:
- 默认的node版本是12,不知道你有没有问题
- 节点 12 版本是 firebase 工具的一个问题,因为有 1 个依赖项已弃用。
npm i
命令以非零代码退出(构建失败)。这里的 hack 是用 echo RUN echo $(npm i -g firebase-tools)
包围命令。不是很干净,但是可以用。
现在 my_script.sh
文件
#!/bin/sh
TOKEN=$(gcloud beta secrets versions access --secret=<mySecretToken> latest)
firebase --token $TOKEN <command>
我是 google cloud-运行 的新手,我希望在 firebase 项目中实现 运行 脚本以更新配置(env 变量)
流程如下
调用 firebase 函数-> 将参数 (bar, baz) 传递到云中 运行 -> 运行 脚本 firebase functions:config:set foo.bar=baz
我所做的是创建一个由 cloud-builders-community 共享的 firebase-tools 图像,下面是代码
// cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/$PROJECT_ID/firebase', '.']
images:
- 'gcr.io/$PROJECT_ID/firebase'
tags: ['cloud-builders-community']
下面是 Dockerfile
//Dockerfile
FROM node
RUN npm i -g firebase-tools
ADD firebase.bash /usr/bin
RUN chmod +x /usr/bin/firebase.bash
ENTRYPOINT [ "/usr/bin/firebase.bash" ]
所以从这里开始,我想知道如何编写 运行 脚本。 任何想法或建议将不胜感激。
云 运行 允许您托管响应 HTTP 请求的容器。
在您的设计中,您是如何设法调用您的容器的? ... 是的,您没有定义任何端点。
我为一个开源项目做出了贡献,我发现了一个可以自动为您服务的工具 bash 脚本作为 http 端点。看看这个 Dockerfile. It use the tool shell2http
对于您的情况,我建议您使用这样的 Dockerfile:
FROM node
RUN npm i -g firebase-tools
ADD my_script.sh /
COPY --from=msoap/shell2http /app/shell2http /shell2http
RUN chmod +x my_script.sh
ENTRYPOINT ["/shell2http","-export-all-vars"]
CMD ["/update","/my_script.sh"]
根据查询参数将您的 my_script.sh
写入 运行 您想要的 bash 命令。
工作示例my_script.sh
#!/bin/sh
firebase --version
并且,在构建容器并将其部署到云 运行 后,调用 https://myservice.....run.app/update?<your env var>
编辑
对于 Firebase 身份验证,您有 2 种解决方案,但在详细介绍之前,您必须按照说明生成刷新令牌 here
- 使用环境变量传递您的令牌。它不是最安全的,因为您的令牌以纯文本形式存入云端 运行 env var.
像这样部署您的服务
gcloud run deploy --image=... --set-env-vars=TOKEN=<tokenValue>
并像这样构建您的 my_script.sh
文件
#!/bin/sh
firebase --token $TOKEN <command>
- 使用secret manager。它更安全,但需要做更多的事情。首先将您的 firebase 刷新令牌保存到秘密管理器
echo "<tokenContent>" | gcloud beta secrets create --replication-policy=automatic --data-file=- myFirebaseToken
因为需要使用gcloud,所以我改变了创建容器的方式。因此这里是新容器
FROM google/cloud-sdk
RUN apt-get update && apt-get install -y nodejs npm
RUN echo $(npm i -g firebase-tools)
RUN node -v
ADD my_script.sh /
COPY --from=msoap/shell2http /app/shell2http /shell2http
RUN chmod +x my_script.sh
ENTRYPOINT ["/shell2http","-export-all-vars"]
CMD ["/update","/my_script.sh"]
2条备注:
- 默认的node版本是12,不知道你有没有问题
- 节点 12 版本是 firebase 工具的一个问题,因为有 1 个依赖项已弃用。
npm i
命令以非零代码退出(构建失败)。这里的 hack 是用 echoRUN echo $(npm i -g firebase-tools)
包围命令。不是很干净,但是可以用。
现在 my_script.sh
文件
#!/bin/sh
TOKEN=$(gcloud beta secrets versions access --secret=<mySecretToken> latest)
firebase --token $TOKEN <command>