4

根据我的cloudbuild.yaml定义,我曾经有一个secrets部分可以从 Google KMS 获取环境值。这些secretEnv字段具有映射到“加密 + base64 编码”值的键:

...

secrets:
- kmsKeyName: <API_PATH>
  secretEnv:
    <KEY>: <ENCRYPTED+BASE64>

我试图将这个值放在一个替换上,当使用构建触发器时它会被替换:

...

secrets:
- kmsKeyName: <API_PATH>
  secretEnv:
    <KEY>: ${_VALUE}

有了这个,我打算保持文件通用。

但是,构建过程一直失败,并显示一条消息failed unmarshalling build config cloudbuild.yaml: 输入字节 0 处的非法 base64 数据。我检查了几次,base64 值没有被错误地复制到触发器上的替换中。

先感谢您。

4

2 回答 2

2

https://cloud.google.com/cloud-build/docs/configuring-builds/substitute-variable-values

仔细阅读Using user-defined substitutions部分后,我已经看到了

参数键的长度限制为 100 字节,参数值的长度限制为 4000 字节。

我的是一个 253 个字符的长字符串。

于 2018-07-26T15:23:58.290 回答
0

我设法重现了一个与您类似的错误(正是这个错误:“无法触发构建:解组构建配置 cloudbuild.yaml 失败:json:无法将字符串解组为 map[string]json.RawMessage 类型的 Go 值,这是因为使用”)。但这只是当我的变量类似于“ name:content ”而不是“ name:content ”时。注意空白,非常重要。

然后,回到你的观点......用户定义的替换限制为 255 个字符(是的,文档当前是错误的,这已被报告)。但是,例如,如果你使用类似的东西:

substitutions:
    variable_name: cool_really_long_content_but_still_no_255_chars

然后你这样做:

steps:
- name: "gcr.io/cloud-builders/docker"
  args: ["build", "-t", "gcr.io/$PROJECT_ID/$cool_really_long_content_but_still_no_255_chars", "."]

如果“gcr.io/$PROJECT_ID/$cool_really_long_content_but_still_no_255_chars”实际上超过 255 个字符,即使您的真正长内容仍然不是 255 个字符,它仍然会失败。并且此错误将出现在 Build details>Logs 中,而不是您在 Google Cloud Build 的“build triggers”部分中单击“run trigger”时看到的弹出窗口,这是由于在这种情况下的日志而出现的报告错误类型在构建详细信息部分显示禁用。

于 2018-10-25T11:18:39.937 回答