在构建触发器上使用base64编码的值时,cloudbuil.yaml不会解组

时间:2018-07-26 12:50:48

标签: google-cloud-platform google-container-builder google-cloud-build

在我的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值没有被错误地复制到触发器的替换项中。

谢谢。

2 个答案:

答案 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上“构建触发器”部分中的“运行触发器”时看到的弹出窗口,在这种情况下,由于日志记录,该错误的类型在“构建详细信息”部分显示为已禁用。