【问题标题】:YAML syntax issueYAML 语法问题
【发布时间】:2017-04-12 00:29:31
【问题描述】:

我是 YAML 新手,只知道 JSON 和 XML 格式

我有这个 TravisCI 的 .yml 配置,它有一些奇怪的语法错误,我不知道如何修复它。

原来我有这个,一切都很好:

language: node_js
node_js:
  - '7'
  - '6'
  - '5'
  - '4'
script: 'npm install istanbul && node cli.js --coverage test/testsrc/es5-es6/a.js'
after_script: 'npm install coveralls && cat coverage/lcov.info | ./node_modules/.bin/coveralls'
notifications:
  email: false
  slack:
    rooms:
      - sumanjs:gvauyHhXXXXXpV5v8LlQOAcI#general

但我读到我们需要在容器中获取一些可用的 C++ 库,所以我不得不根据这些说明在 .yml 文件中添加一些东西:

https://docs.travis-ci.com/user/languages/javascript-with-nodejs#Node.js-v4-(or-io.js-v3)-compiler-requirements

所以现在我有了这个,这是无效的,但我不知道为什么:

language: node_js
node_js:
  - '7':
   env:
      - CXX=g++-4.8
    addons:
      apt:
        sources:
          - ubuntu-toolchain-r-test
        packages:
          - g++-4.8
  - '6':
   env:
      - CXX=g++-4.8
    addons:
      apt:
        sources:
          - ubuntu-toolchain-r-test
        packages:
          - g++-4.8
  - '5':
  env:
    - CXX=g++-4.8
  addons:
    apt:
      sources:
        - ubuntu-toolchain-r-test
      packages:
        - g++-4.8
  - '4':
  env:
    - CXX=g++-4.8
  addons:
    apt:
      sources:
        - ubuntu-toolchain-r-test
      packages:
        - g++-4.8
script: 'npm install istanbul && node cli.js --coverage test/testsrc/es5-es6/a.js'
after_script: 'npm install coveralls && cat coverage/lcov.info | ./node_modules/.bin/coveralls'
notifications:
  email: false
  slack:
    rooms:
      - sumanjs:gvauyHhXXXXXcuzpV5QOAcI#general

我把它交给 YAML linter,它说:

【问题讨论】:

    标签: yaml


    【解决方案1】:

    这并不奇怪。您将键 '7' 作为映射的第一个键值对,它是作为键 node_js 的值的序列的第一个元素(即该标量在文件中的第二次出现)。

    键的缩进距离行首有四个位置,因此它所属的映射的所有内容都应该至少具有该缩进。 env: 但是没有缩进四个位置,所以这是一个错误。

    如果键 '7' 的值是(不可见的)null,则缩进 env 一个。如果该值是具有键 env) 的映射,则缩进 env 至少两个位置。

    【讨论】:

    • 谢谢,我更新了问题以使其更清楚,我从有效的 yml 开始,添加了一些东西,现在它无效,仍在尝试解决这个问题
    【解决方案2】:

    显然使用的正确格式是这样的:

    language: node_js
    node_js:
      - '7'
      - '6'
      - '5'
      - '4'
    env:
      - CXX=g++-4.8
    addons:
      apt:
        sources:
          - ubuntu-toolchain-r-test
        packages:
          - g++-4.8
    
    script: 'npm install istanbul && node cli.js --coverage test/testsrc/es5-es6/a.js'
    after_script: 'npm install coveralls && cat coverage/lcov.info | ./node_modules/.bin/coveralls'
    notifications:
      email: false
      slack:
        rooms:XXXXXXXXXzpV5v8LXXcI#travis-ci
    

    但是,如果我们想将 env/addons 键单独应用于 Node.js 版本,我不确定这将如何工作。

    【讨论】:

    • 一件事是正确的 YAML 文件,因为您必须像我在回答中指出的那样进一步缩进 env。另一件事是,一旦可以加载 YAML,它是否是 Travis 的语义正确输入。后面的部分我真的帮不了你。
    • 是的,这是真的,我个人错过了有关 Travis 的语法和语义正确的 yaml 的信息,困难的情况。这似乎适用于 Travis,但我不确定为什么没有为每个 Node.js 版本(4、5、6、7)单独定义 env/addon 键/值,所以我在语义和语法上仍然处于黑暗中,哦,好吧:)
    猜你喜欢
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 2015-08-04
    • 2016-02-27
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    相关资源
    最近更新 更多