Travis部署脚本多行命令

时间:2019-10-14 15:06:07

标签: travis-ci

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

Red

这是错误日志:

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

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

2 个答案:

答案 0 :(得分:1)

TLDR

从YAML的角度来看,您给出的示例看起来很合法。请确保没有空行或注释,以免脚本部分的内容变成一个字符串

长版

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

这与top level script section不同。顶层script部分允许您使用YAML数组,这意味着您可以提供以-

开头的多个单行字符串

话虽如此,任何YAML单行(无行结尾)都可以在deploy的脚本部分中正确使用。这是一些例子

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"

答案 1 :(得分:0)

我会尝试以下选项之一:

选项1:创建您的this脚本,然后从deploy.sh对其进行调用。我喜欢这个选项,因为它可以使生活更轻松-因为您可以单独测试和运行它,并且可以避免遇到这个确切的问题。

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

a:尝试在.travis.yml定义中使用|>(表示多行文本):

script:

b:尝试将script: > pip install something && another-command && yet-another-command && docker push "image-name" 作为数组提供(假设Travis在此也支持此语法-其他许多选项也支持该语法):

script