ruby - 如何将 GitLab CI 变量导入 Sinatra 应用程序以查询 Google Cloud Datastore?
问题描述
简短:我希望能够使用 Google Cloud App Engine 部署没有硬编码机密和变量的 Sinatra 应用程序。建议的选项是在确保从 Google Cloud Datastore 加载环境变量的同时部署到 App Engine。我希望找到类似于 Heroku 的简单性的东西,但事实并非如此。
问题:如何将 $SERVICE_ACCOUNT 环境信息(我在 GitLab CI / CD 部分中设置)作为凭据值获取foobar.rb
?
应用程序.yaml:
image: google/cloud-sdk:latest
before_script:
- apt-get install -y ruby-full build-essential
- gem install bundler
- bundle config --global silence_root_warning 1
- bundle install
after_script:
- rm /tmp/$CI_PIPELINE_ID.json
deploy_production:
stage: deploy
environment: Production
only:
- production
script:
- echo $SERVICE_ACCOUNT > /tmp/$CI_PIPELINE_ID.json
- gcloud auth activate-service-account --key-file /tmp/$CI_PIPELINE_ID.json
- gcloud --quiet --project $PROJECT_ID app deploy app.yaml
foobar.rb:
...
require "google/cloud/datastore"
class App < Sinatra::Application
if settings.production?
data_store = Google::Cloud::Datastore.new(
project: 'foobar',
credentials: "???"
)
query = data_store.query "kindoffoobar"
results = data_store.run query
# Set each result as an env variable
results[0].properties.to_h.each do |key, value|
ENV[key]= value
end
end
... rest of app
解决方案
推荐阅读
- android - UIDocumentInteractionController 等效于 Android Java
- java - Android - 我如何运行一个永远随机接收数据的服务器套接字?
- swiftui - 从 AppKit NSButton 打开新的 SwiftUI 窗口
- r - 编码挑战:如果其他 col 中的行为 TRUE,则计算 col 值的总和(表摘要)
- docker - -v(--volume) 似乎很懒惰!奇怪的行为
- java - 预期的令牌空白语法错误?
- html - 将徽标和公司名称居中在网页顶部
- python - 如何在 Firestore 中的 2 个不同集合之间移动文档?
- jquery - JS中的纺车,如何在随机选择的切片的中心自动停止旋转
- gpu - 指定任务资源:分数 gpu