Как передать секретную переменную env в Google app Engine и gitlab CI

# #google-app-engine #google-cloud-platform #continuous-integration #gitlab #continuous-deployment

# # #google-app-engine #google-облачная платформа #непрерывная интеграция #gitlab #непрерывное развертывание

Вопрос:

Я использую gitlab и развертываю его в Google app Engine для своего приложения nodejs.

Доступ к службе Google добавляется как переменная в настройках gitlab

 SERVICE_ACCOUNT_KEY: 
   {
      "type": "service_account",
      "project_id": "node-us",
      "private_key_id": "",
      "private_key": "",
      "client_email": "gitlab-demo-service-account@node-us.iam.gserviceaccount.com",
      "client_id": "",
      "auth_uri": "",
      "token_uri": "",
      "auth_provider_x509_cert_url": "",
      "client_x509_cert_url": ""
    }
 

.gitlab-ci.yml

 image: node:latest
cache:
  paths:
    - node_modules/
    
before_script:
  - echo "deb http://packages.cloud.google.com/apt cloud-sdk-jessie main" | tee /etc/apt/sources.list.d/google-cloud-sdk.list
  - curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
  - apt-get update
  - apt-get -qq -y install google-cloud-sdk

deploy_production:
  stage: deploy
  environment: Production
  only:
    - master
  script:
    - echo $SERVICE_ACCOUNT_KEY > /tmp/$CI_PIPELINE_ID.json
    - gcloud auth activate-service-account --key-file /tmp/$CI_PIPELINE_ID.json
    - gcloud --quiet --project node-us app deploy app.yaml

after_script:
  - rm /tmp/$CI_PIPELINE_ID.json
 

в моей корневой папке есть app.yaml файл и .env файл

На данный момент я тестировал поток, который работал нормально и успешно развернут в Google App Engine. (он не содержит никаких секретных ключей)

Однако я хочу, чтобы мои переменные env (содержащие секретные ключи) также игнорировались .gitignore , чтобы не быть частью app.yaml файла.

Как я могу передать свои секретные ключи env?

Комментарии:

1. Мне непонятно, что такое VC. Можете ли вы объяснить? Кроме того, я не понимаю вашу точку блокировки. Что вы хотите добавить, а что вы хотите игнорировать? в какое время? Почему? Если у вас есть пример, он будет идеальным!! Спасибо

2. Ok .. VC -> контролируемая версия, хотя и удалена, поскольку это может создавать путаницу. Как я могу передать значения секретного ключа переменной env. Это сработает, если я добавлю ее в корневую папку, однако это невозможно сделать, поскольку она содержит секреты, как я могу передать переменные env в Google App Engine. В какой момент : это то, что мне тоже нужно знать?

3. Я думал использовать medium.com/@brian . young.pro / … однако нет подключения к репозиторию для запуска сборки Google cloud с помощью gitlab

Ответ №1:

Не передавайте ее!

Используйте Secret Manager для передачи вашего секрета. Итак, в вашем репозитории используйте URI secret manager для ссылки на секрет с секретной версией. Таким образом, в вашем коде или в файлах app.yaml / .env нет секрета.

Если вам нужно обновить секрет, сделайте это вручную. Некоторые задачи сложно или дорого автоматизировать.

Примечание: статья, о которой вы упоминаете, была выпущена за 6 месяцев до выпуска Secret Manager (в начале 2020 года)