如何使用 yq 删除 YAML 文件中的属性?

Arc*_*ano 5 yaml docker-compose azure-pipelines yq

由于最近对镜像ubuntu-latest 进行了更改,引入了 docker-compose 的错误版本,因此我必须在管道上锁定 docker-compose 的版本。

但是,我曾经使用一项任务来帮助清理我的部署脚本,即DockerCompose@0。我正在尝试实现相当于

- task: DockerCompose@0
  displayName: 'Remove build options'
    inputs:
      action: 'Combine configuration'
      removeBuildOptions: true
Run Code Online (Sandbox Code Playgroud)

所以基本上我正在考虑使用yq它将解析 YAML 文件并删除不适用于堆栈部署的构建选项。但是,我不太确定该怎么做。因为我需要从可能包含它的每项服务中删除它。

因此给出以下输入

- task: DockerCompose@0
  displayName: 'Remove build options'
    inputs:
      action: 'Combine configuration'
      removeBuildOptions: true
Run Code Online (Sandbox Code Playgroud)

我想要得到

services:
  def:
    build: ./def
    image: trajano/def
  ghi:
    image: trajano/ghi
version: '3.7'
Run Code Online (Sandbox Code Playgroud)

sja*_*sja 7

对于较新的 yq 版本(请参阅文档):

yq eval 'del(services.[].build)' foo.yml
Run Code Online (Sandbox Code Playgroud)

  • `yq eval 'del(.services.def.build)' foo.yml` 为我工作 (6认同)