首页 > 解决方案 > 如何将 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

foob​​ar.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

标签: rubyenvironment-variablesgoogle-cloud-datastoregitlab-ci

解决方案


推荐阅读