如何在 Travis-CI 配置文件 (YAML) 中正确使用 curl?

Posted

技术标签:

【中文标题】如何在 Travis-CI 配置文件 (YAML) 中正确使用 curl?【英文标题】:How to properly use curl in Travis-CI config file (YAML)? 【发布时间】:2016-04-13 18:13:39 【问题描述】:

好的。这让我慢慢发疯。 我已经为我的一个项目在 Travis 上设置了 CI。我正在运行一些 JUnit 测试,我想将测试结果上传到我自己的服务器,这样浏览起来就容易多了。

基本上,我想做的就是这样称呼:

curl -H 'Authorization: Token someToken' -X POST http://my.server.com -F filedata=@file.txt

这就是我在 .travis.yml 文件中尝试做的事情。

after_script:
 - curl -H 'Authorization: Token someToken' -X POST http://my.server.com -F filedata=@file.txt

问题是,对于上面的行,我收到一个如下所示的错误:

$ :"curl -H '\"Authorization"=>"Token someToken\"' -X POST http://my.server.com -F filedata=@file.txt"
/home/travis/build.sh: line 45: Token someToken"' -X POST http://my.server.com -F filedata=@file.txt: No such file or directory

我了解到在 YAML 中冒号代表一对键值,我发现可以只使用引号来转义冒号。

嗯 - 这是我被困的地方。我尝试以许多不同的方式应用这些引号,但不知何故,每次我都会再次遇到相同的错误。

例如:

curl -H '"Authorization: Token someToken"'
curl -H "\"Authorization: Token someToken\""
curl -H "'Authorization: Token someToken'"
curl -H '"Authorization": Token someToken'

我觉得自己很愚蠢,我知道解决这个问题可能很简单,但我已经感受到了“在转义引号时转义引号”的事情,如果有人能指出我正确的方向,我将不胜感激。

当我尝试关注这些问题以解决我的问题时,我还链接到这些问题:

Escaping colons in YAML

How to escape indicator characters (i.e. : or - ) in YAML

【问题讨论】:

可以- "curl -H 'Authorization: Token someToken' -X POST http://my.server.com -F filedata=@file.txt"吗? 不幸的是,我遇到了同样的错误。此外,在 Travis 日志文件中,引号似乎被忽略了。 另一个可能不是首选的选项是使用带有该命令的 shell 脚本(或生成它,如果适用)并运行它。 Quoting YAML (for Travis CI)的可能重复 【参考方案1】:

好的 - 我已经设法通过创建简单的 bash 脚本解决(或破解)这个问题:

#!/bin/bash
curl -H 'Authorization: Token someToken' -X POST http://my.server.com -F filedata=@file.txt

然后我继续调用 .travis.yml 文件中的脚本:

- ./upload_script.sh

感谢@набиячлэвэлиь 在 cmets 中向我推荐了该解决方案。

任何其他更好的解决方案都非常受欢迎。

【讨论】:

【参考方案2】:

在 YAML 中,冒号是分隔映射键和值的分隔符。

你现在拥有的:

curl -H 'Authorization: token someToken' "https://api.github.com/repos/:owner/:repo/releases/tags/$TRAVIS_TAG"

​ 是带有键 curl -H 'Authorization 和值 token someToken' "https://api.github.com/repos/:owner/:repo/releases/tags/$TRAVIS_TAG" 的映射。您可以看到它是如何渗透到构建脚本中的。

你想要的是一个正确引用的字符串:

after_deploy:
  - "curl -H 'Authorization: token someToken' \"https://api.github.com/repos/:owner/:repo/releases/tags/$TRAVIS_TAG\""

【讨论】:

我看到这是 набиячлэвэлиь 早些时候提出的。它是如何失败的? 我的 .tarvis 文件中有以下内容,工作正常:after_success: - echo somejson > buildset.json - "curl -H 'Content-Type: application/json' --request POST --data @buildset.json \"https://hooks.website.com/catch/jhsgdjsag76t76\"" 但是当我像下面这样使用它时,它会失败。 after_success: - echo somejson > buildset.json - if [ "$TRAVIS_PULL_REQUEST" != "false" ] ; then "curl -H 'Content-Type: application/json' --request POST --data @buildset.json \"https://hooks.website.com/catch/jhsgdjsag76t76\"" ; fi这里出了什么问题? @banzaiman【参考方案3】:

您可以更改语法并直接运行。

示例 slack webhook

 - 'curl args:  -X POST -H ''Content-type: application/json'' --data ''"text":"Hello, World!"'' https://hooks.slack.com/services/####/###############'

【讨论】:

以上是关于如何在 Travis-CI 配置文件 (YAML) 中正确使用 curl?的主要内容,如果未能解决你的问题,请参考以下文章

[travis-ci]自动集成测试

如何在 YAML 文件中配置 Jupyter 笔记本密码?

如何在 Silex 框架中使用 YAML 配置文件

如何使用 YAML 文件在 Spring Boot 中配置 Swagger?

无法使用 Travis-CI 运行可执行文件-不确定我做错了啥

如何使用 spring boot + .yaml 创建配置文件?