Как получить переменные GitLab CI в приложение Sinatra для запроса хранилища данных Google Cloud? - PullRequest
1 голос
/ 29 апреля 2019

Short: Я хочу иметь возможность развертывать приложение Sinatra без жестко закодированных секретов и переменных с помощью Google Cloud App Engine. Развертывание в App Engine с гарантией загрузки переменных среды из хранилища данных Google Cloud было рекомендуемым вариантом. Я надеялся найти что-то похожее на простоту Heroku, но это не так.

Вопрос: Как получить информацию о среде $ SERVICE_ACCOUNT (которую я установил в разделе Cit / CD GitLab) в качестве значения учетных данных в 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
...