在我的cloudbuild.yaml
定义中,我曾经有一个secrets
部分来从Google KMS获取环境值。 secretEnv
字段具有映射到“已加密+ base64编码”值的密钥:
...
secrets:
- kmsKeyName: <API_PATH>
secretEnv:
<KEY>: <ENCRYPTED+BASE64>
我尝试将此值放在替代项上,当使用构建触发器时将替换该值:
...
secrets:
- kmsKeyName: <API_PATH>
secretEnv:
<KEY>: ${_VALUE}
为此,我打算保持文件的通用性。
但是,构建过程始终失败,并显示一条消息:无法解组构建配置cloudcloud.yaml:输入字节0处的非法base64数据。我已经检查了好几次,并且base64值没有被错误地复制到触发器的替换项中。
谢谢。
答案 0 :(得分:1)
https://cloud.google.com/cloud-build/docs/configuring-builds/substitute-variable-values
仔细阅读Using user-defined substitutions
部分后,我发现替换限制为100个字符。我的是一个253个字符的字符串。
答案 1 :(得分:0)
我设法重现了一个与您类似的错误(正是这个错误:“未能触发构建:未能将编组构建配置cloudbuild.yaml解组:json:无法将字符串解组为map [string] json.RawMessage类型的Go值,是因为使用“)。但这只是在我的变量是“ 名称:内容”而不是“ 名称:内容”时。 请注意空白,非常重要。
然后,回到您的观点...用户定义的替换限制为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个字符,它仍然会失败。而且此错误将显示在“构建详细信息”>“日志”中,而不是当您单击Google Cloud Build上“构建触发器”部分中的“运行触发器”时看到的弹出窗口,在这种情况下,由于日志记录,该错误的类型在“构建详细信息”部分显示为已禁用。