【问题标题】:Gcloud build trigger environment variable substitution in app.yaml for appEngineGcloud 在 app.yaml 中为 appEngine 构建触发环境变量替换
【发布时间】:2021-05-08 07:13:54
【问题描述】:

我正在尝试用云构建触发器替换 app.yaml 中的变量。

我在构建触发器中添加了替换变量。

将环境变量添加到 app.yaml,以便它们可以轻松地替换为构建触发器变量。像这样:

env_variables:
 SECRET_KEY: %SECRET_KEY%

在 cloudbuild.yaml 中添加一个步骤,将 app.yaml 中的所有 %XXX% 变量替换为其来自构建触发器的值。

    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 ?

我在 cloudbuild.yaml 的同一级别有一个 app.yaml 到项目的根目录

更新

我正在尝试使用此命令在本地构建和调试 gcloud:

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

当我查看 app.yaml 文件时,替换按预期工作,完全没有例外。

与 gcloud 构建环境有什么区别?

【问题讨论】:

    标签: triggers yaml gcloud app.yaml


    【解决方案1】:

    入口点应该是可执行文件,使用/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。

    【讨论】:

    • 我根据您的建议更新了我的问题。看看我的测试结果。谢谢!
    • 我不清楚你在问什么,Cloud Build 是 cloud.google.com/cloud-build/docs/build-config 的一个非常通用的工具
    • 我正在尝试让我的替代品使用 cloudbuild.yaml 在 gcloud build 上工作。当我在本地调试时,我没有得到异常“没有这样的文件或目录”
    • 您显然处于反模式。您可以使用 app.yaml 和 cloudbuild.yaml 设置环境变量。要求在构建时用 sed 替换是反模式。
    • 好的,我将尝试直接在 ENV_VAR 中设置替换:来自 app.yaml。如果它像那样工作,那就太简单了。
    【解决方案2】:

    好的,我最终决定使用 github action 而不是 google cloud triggers。

    由于 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/app-yaml-env-compiler@v1.0
       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/app-yaml-env-compiler@v1.0”

    很遗憾,GAE 没有提供最简单的方法来处理 app.yaml 的环境变量。我不想使用 KMS,因为我需要更新 beta-settings/cloud sql 实例。我真的需要将所有内容替换为 app.yaml。

    这样我可以针对正确的环境采取特定的行动并管理秘密。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-28
      • 2013-08-07
      • 2014-06-17
      • 2020-02-10
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多