You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在YAML中设置带引号的字符串列表以适配GCP构建配置

解决ruamel.yaml生成GCP Cloud Build配置的args格式问题

我来帮你搞定这个格式问题!你需要让args既保持流样式列表(也就是["a", "b", "c"]这种括号包裹的形式),又让每个元素带上双引号。下面是具体的解决方案:

解决方案代码

import ruamel.yaml
from ruamel.yaml.scalarstring import DoubleQuotedScalarString as dq
from ruamel.yaml.comments import CommentedSeq

yaml = ruamel.yaml.YAML()
yaml.indent(sequence=2)
yaml.preserve_quotes = True
yaml.default_flow_style = None

CF2_cloudbuild = {
    'steps': [
        {
            'name': dq("gcr.io/cloud-builders/gcloud"),
            # 用CommentedSeq替代普通列表,包裹带双引号的元素
            'args': CommentedSeq([dq("functions"), dq("deploy"), dq("publish_resized")]),
            'timeout': dq("1600s")
        }
    ]
}

# 强制将args序列设置为流样式
CF2_cloudbuild['steps'][0]['args'].fa.set_flow_style()

with open("file.yaml", 'w') as fp:
    yaml.dump(CF2_cloudbuild, fp)

为什么这个方法有效?

  1. CommentedSeq的作用:ruamel.yaml中的CommentedSeq是专门用来处理YAML序列的类,它允许我们单独控制序列的渲染样式(块样式/流样式),而普通列表会继承全局的default_flow_style设置。
  2. set_flow_style():调用这个方法可以强制将该序列渲染为流样式(用方括号包裹),而不是默认的块样式(每行一个元素)。
  3. DoubleQuotedScalarString:确保每个元素都被双引号包裹,满足GCP构建配置的要求。

运行这段代码后,生成的file.yaml内容会完全符合你的需求:

steps:
  - name: "gcr.io/cloud-builders/gcloud"
    args: ["functions", "deploy", "publish_resized"]
    timeout: "1600s"

内容的提问来源于stack exchange,提问作者Wojtek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 15:42:38