Ruby 如何让GitLab CI变量进入Sinatra应用程序以查询Google云数据存储?

Ruby 如何让GitLab CI变量进入Sinatra应用程序以查询Google云数据存储?,ruby,environment-variables,google-cloud-datastore,gitlab-ci,Ruby,Environment Variables,Google Cloud Datastore,Gitlab Ci,简称: 我希望能够使用谷歌云应用引擎部署一个没有硬编码秘密和变量的Sinatra应用程序。建议在确保从Google云数据存储加载环境变量的同时部署到App Engine。我希望找到类似于Heroku的简单性的东西,但事实并非如此 问题: 如何获取$SERVICE\u帐户环境信息(我在GitLab CI/CD部分中设置的)作为foobar.rb中的凭据值 app.yaml: image: google/cloud-sdk:latest before_script: - apt-get ins

简称: 我希望能够使用谷歌云应用引擎部署一个没有硬编码秘密和变量的Sinatra应用程序。建议在确保从Google云数据存储加载环境变量的同时部署到App Engine。我希望找到类似于Heroku的简单性的东西,但事实并非如此

问题: 如何获取$SERVICE\u帐户环境信息(我在GitLab CI/CD部分中设置的)作为
foobar.rb中的凭据值

app.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

...
需要“谷歌/云/数据存储”
类应用程序
这个答案有帮助吗?放弃并决定在部署之前将env变量保存在app.yaml文件中,而不提交它们。这个答案有帮助吗?放弃并决定在部署之前将env变量保存在app.yaml文件中,而不是提交它们。