使用 yq 版本 4 修改 .yaml 以添加不在引号中的 & 和 * 字符



我需要通过向pipelines.branches.develop步骤集添加任务定义来更新bitbucket pipeline yaml文件(将其添加为第一步,同时保留任何现有步骤),如果开发分支管道不存在,则使用指定的任务定义作为步骤创建它。

使用添加到开发管道的yq命令如下:

yq '.pipelines.branches.develop = [{"step":"*My-Step"}] + .pipelines.branches.develop' bitbucket-pipelines.yml

这是有效的,但它包含引号'*My-Step',我不知道如何在不导致命令失败的情况下删除它们。

我在定义步骤中添加的'&'字符也有同样的问题。

谁能提供一些指导,或文档。

*&字符实际上不是字段名的一部分-它们是yaml中用作别名和锚的特殊字符(基本上用于重用文件中的内容块)。

您需要使用特殊表达式将它们与字符串值分开更新:https://mikefarah.gitbook.io/yq/operators/anchor-and-alias-operators.

这是你可能需要的:

yq '.pipelines.branches.develop = [( {"step":null} | .step alias="My-Step")] + .pipelines.branches.develop ' 

重要的一点是这里看起来很尴尬的表达式:

( {"step":null} | .step alias="My-Step")

这是创建一个新的映射与step键,然后单独设置别名为'My-Step'。

免责声明:我写的是yq

最新更新