【问题标题】:Travis deploy script multiline commandTravis 部署脚本多行命令
【发布时间】:2019-10-14 15:06:07
【问题描述】:

我在 Travis 文件中有以下部署脚本,并且面临多行命令的问题。我尝试了很多组合,但找不到合适的解决方案。如果我将它提取到文件并从脚本属性调用它,它可以正常工作,但我们的目标是将脚本属性中的所有命令作为多行命令。

deploy:
  - provider: script
    skip_cleanup: true
    script: mvn deploy -B -DskipTests -Dbuild.number="$TRAVIS_BUILD_NUMBER"
    on:
      tags: false
      branch: dev

  - provider: script
    skip_cleanup: true
    script:
      pip install something &&
      another-command &&
      yet-another-command &&
      docker push "image-name"
    on:
      tags: false
      all_branches: true

这是错误日志:

sh: 1: Syntax error: "&&" unexpected

如果有人知道如何定义多行命令,我将不胜感激。提前致谢。

【问题讨论】:

    标签: travis-ci


    【解决方案1】:

    我会尝试以下选项之一:

    选项 1: 创建您的 deploy.sh 脚本,并从 .travis.yml 调用它。我喜欢这个选项,因为它会让生活更轻松 - 因为您可以单独测试和运行它,并避免您面临的这个确切问题。

    选项 2:如果您坚持只在 .travis.yml 中使用命令 - 您可以尝试以下语法更改之一:

    a:在script: 定义中尝试|>(表示多行文本):

    script: >
      pip install something &&
      another-command &&
      yet-another-command &&
      docker push "image-name"
    

    b:尝试将script 提供为一个数组(假设 Travis 在这里也支持这种语法 - 因为它在许多其他选项中都受支持):

    script: 
      - pip install something
      - another-command
      - yet-another-command
      - docker push "image-name"
    

    【讨论】:

    • 使用 |或 > 语法,它在命令末尾有一个新行。确保以 >- 或 |- 开头
    【解决方案2】:

    TLDR

    从 YAML 的角度来看,您在描述中给出的示例看起来是合法的。请确保您没有空行或 cmets,这会阻止脚本部分中的内容成为一个字符串

    加长版

    部署中的script 提供程序要求脚本内容为单个字符串。只允许一行,所以你不能使用 YAML 数组。

    这与top level script section不同。顶级 script 部分允许您使用 YAML 数组,这意味着您可以提供多个以 - 开头的单行字符串

    话虽如此,任何 YAML 单行(没有行尾)都可以在部署的脚本部分中正确使用。下面是一些例子

    script: pip install something &&
          another-command &&
          yet-another-command &&
          docker push "image-name"
    
    # >- to removing the ending new line
    script: >-
          pip install something &&
          another-command &&
          yet-another-command &&
          docker push "image-name"
    

    下面的示例对于部署的脚本部分不起作用,但对于顶级脚本部分起作用

    # Only works in top level script not deploy script
    script:
        - pip install something && another-command
        - yet-another-command
        - docker push "image-name"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-01
      • 2016-09-13
      • 2020-08-03
      • 2020-12-21
      • 1970-01-01
      • 1970-01-01
      • 2018-01-31
      • 1970-01-01
      相关资源
      最近更新 更多