Подстановка переменной среды триггера сборки Gcloud в app.yaml для appEngine

Я пытаюсь заменить переменную в app.yaml триггером облачной сборки.

Я добавил переменную подстановки в триггер сборки.

Добавьте переменные среды в app.yaml таким образом, чтобы их можно было легко заменить переменными триггера сборки. Нравится:

env_variables:
 SECRET_KEY: %SECRET_KEY%

Добавьте шаг в cloudbuild.yaml, чтобы заменить все переменные% XXX% внутри app.yaml их значениями из триггера сборки.

    steps:
    - name: node:10.15.1
       entrypoint: npm
       args: ["install"]
    - name: 'gcr.io/cloud-builders/gcloud'
       entrypoint: bash
       args:
         - '-c'
         - |
           sed -i 's/%SESSION_SECRET%/'${_SESSION_SECRET}'/g' app.yaml
    timeout: "1600s"

Проблема в том, что Gcloud Build выдает исключение:

Already have image (with digest): gcr.io/cloud-builders/gcloud
bash: _L/g: No such file or directory

Почему ? Как я могу заменить свой app.yaml?

У меня есть app.yaml в корне проекта на том же уровне cloudbuild.yaml

ОБНОВЛЕНО

Я пытаюсь создать и отладить gcloud локально с помощью этой команды:

sudo cloud-build-local --config=cloudbuild.yaml --write-workspace=../workspace --dryrun=false --substitutions=_SESSION_SECRET=test --push .

Когда я заглянул в файл app.yaml, подстановка сработала так, как ожидалось, и никаких исключений нет.

В чем разница со средой сборки gcloud?


person Christophe Chenel    schedule 04.02.2021    source источник


Ответы (2)


Хорошо, я наконец решил использовать действие github вместо триггеров облака Google.

Поскольку триггеры облака Google не могут найти свой собственный app.yaml и самостоятельно управлять этой долбанной переменной окружения.

Вот как это сделать:

Моя среда: движок приложений, стандартный (не гибкий), приложение Nodejs Express, PostgreSQL CloudSql.

Сначала настройка:

1. Create a new Google Cloud Project (or select an existing project).

2. Initialize your App Engine app with your project.

[Create a Google Cloud service account][sa] or select an existing one.

3. Add the the following Cloud IAM roles to your service account:

    App Engine Admin - allows for the creation of new App Engine apps

    Service Account User - required to deploy to App Engine as service account

    Storage Admin - allows upload of source code

    Cloud Build Editor - allows building of source code

[Download a JSON service account key][create-key] for the service account.

4. Add the following [secrets to your repository's secrets][gh-secret]:

    GCP_PROJECT: Google Cloud project ID

    GCP_SA_KEY: the downloaded service account key

App.yaml

runtime: nodejs14
env: standard
env_variables:
  SESSION_SECRET: $SESSION_SECRET
beta_settings:
  cloud_sql_instances: SQL_INSTANCE

Затем действие github

name: Build and Deploy to GKE

on: push

env:
  PROJECT_ID: ${{ secrets.GKE_PROJECT }}
  DATABASE_URL: ${{ secrets.DATABASE_URL}}
jobs:
  setup-build-publish-deploy:
    name: Setup, Build, Publish, and Deploy
    runs-on: ubuntu-latest

steps:
 - uses: actions/checkout@v2
 - uses: actions/setup-node@v2
   with:
    node-version: '12'
 - run: npm install
 - uses: actions/checkout@v1
 - uses: ikuanyshbekov/[email protected]
   env:
    SESSION_SECRET: ${{ secrets.SESSION_SECRET }}  
 - shell: bash
   run: |
        sed -i 's/SQL_INSTANCE/'${{secrets.DATABASE_URL}}'/g' app.yaml
 - uses: actions-hub/gcloud@master
   env:
    PROJECT_ID: ${{ secrets.GKE_PROJECT }}
    APPLICATION_CREDENTIALS: ${{ secrets.GCLOUD_AUTH }}
    CLOUDSDK_CORE_DISABLE_PROMPTS: 1
   with:
    args: app deploy app.yaml

Чтобы добавить секреты в действие git hub, вы должны перейти в: Настройки / секреты

Обратите внимание, что я мог справиться со всеми заменами с помощью сценария bash. Так что я бы не зависел от проекта github ikuanyshbekov/[email protected]

Жаль, что GAE не предлагает самый простой способ обработки переменной среды для app.yaml. Я не хочу использовать KMS, так как мне нужно обновить экземпляр beta-settings / cloud sql .. Мне действительно нужно было заменить все в app.yaml.

Таким образом, я могу выполнить конкретное действие для нужной среды и управлять секретами.

person Christophe Chenel    schedule 06.02.2021

Точка входа должна быть исполняемым файлом, используйте /bin/bash или /bin/sh.

Как осмотреть изображение изнутри (в общем):

$ docker pull gcr.io/cloud-builders/gcloud
Using default tag: latest
latest: Pulling from cloud-builders/gcloud
...
$ docker images
REPOSITORY                     TAG       IMAGE ID       CREATED             SIZE
gcr.io/cloud-builders/gcloud   latest    8499764c4ef6   About an hour ago   4.01GB
$ docker run -ti --entrypoint '/bin/bash' 8499764c4ef6
root@60354dfb588a:/#

Вы можете протестировать свои команды оттуда, чтобы протестировать, не отправляя их каждый раз в Cloud Build.

person Juancki    schedule 04.02.2021
comment
Я обновил свой вопрос вашим предложением. Смотрите результаты моего теста. Спасибо! - person Christophe Chenel; 05.02.2021
comment
Мне непонятно, о чем вы спрашиваете, Cloud Build - это очень общий инструмент для cloud.google.com/cloud-build/docs/build-config - person Juancki; 05.02.2021
comment
Я пытаюсь заставить свою замену работать над сборкой gcloud с помощью cloudbuild.yaml. когда я отлаживаю локально, я не получаю исключения: нет такого файла или каталога - person Christophe Chenel; 05.02.2021
comment
Вы явно настроены здесь против. Вы можете установить переменные среды с помощью app.yaml и cloudbuild.yaml. Требование замены во времени сборки на sed является анти-шаблоном. - person Juancki; 05.02.2021
comment
Хорошо, я попробую установить подстановку прямо в ENV_VAR: из app.yaml. Было бы так просто, если бы так работало. - person Christophe Chenel; 05.02.2021