如何找出有微小差异的yaml代码重复?

如何找出有微小差异的yaml代码重复?,yaml,circleci,Yaml,Circleci,下面的yaml重复相同的块,只有微小的差异 jobs: "python2": steps: - checkout - run: name: make check command: > virtualenv -p $(which python2.7) venv && make check "python3"

下面的yaml重复相同的块,只有微小的差异

 jobs:
    "python2":
      steps:
        - checkout
        - run:
            name: make check
            command: >
               virtualenv -p $(which python2.7) venv
               && make check

    "python3":
      steps:
        - checkout
        - run:
            name: make check
            command: >
               virtualenv -p $(which python3.6) venv
               && make check
在这两个块之间,嵌套值中只有一个子字符串(python二进制名称python2.7 vs python3.6)不同

避免此代码重复的最佳方法是什么


虽然看起来很有希望,但我还是在尝试扩展yaml块

steps: &commonSteps
  - checkout
  - run:
    name: make check
    command: ""


version: 2
jobs:
  "python2":
     <<: *commonSteps
步骤:&commonSteps
-结帐
-运行:
姓名:核对
命令:“
版本:2
工作:
“蟒蛇2”:
消除差异


不要在步骤中设置Python版本,而是在CircleCI配置中为该版本的Python使用适当的Docker映像。然后,步骤将是相同的,可以使用YAML锚/别名。

我不知道如何将某些YAML子树标记为其他子树的副本,并使用一些替换。锚点实际上是子树的精确副本。@Tsyvarev我想我需要一些类似于对yaml文件的函数调用的东西。我知道它可以用于模板化json。也许模板化是一种方式。是的,“模板化”可能会有所帮助,但这将不再是一个纯粹的YAML。也就是说,您可以选择任何您喜欢的模板引擎,并尝试使用它。但您不能在堆栈溢出问题上询问“哪个模板最好”。然而,您可能会问一些与circle ci特别相关的问题—可能是给定的配置机制具有某种类型的宏。因此,添加“circleci”标签可能对您的问题非常有帮助。