如何在 Travis-CI 配置文件(YAML)中正确使用 curl?
How to properly use curl in Travis-CI config file (YAML)?
好的。这让我慢慢发疯。
我已经为我的一个项目在 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'
我觉得自己很愚蠢,我知道解决这个问题可能很简单,但我已经深入了解了 "escape quotes while escaping quotes" 这件事,如果有人能给我指出正确的方向,我将不胜感激。
我也链接到这些问题,因为我试图按照它们来解决我的问题:
Escaping colons in YAML
How to escape indicator characters (i.e. : or - ) in YAML
好的 - 我已经设法通过创建简单的 bash 脚本来解决(或破解)这个问题:
#!/bin/bash
curl -H 'Authorization: Token someToken' -X POST http://my.server.com -F filedata=@file.txt
然后我继续调用 .travis.yml 文件中的脚本:
- ./upload_script.sh
感谢@набиячлэвэлиь 在评论中向我推荐了解决方案。
我们非常欢迎任何其他更好的解决方案。
在 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\""
您只需更改语法并直接获取它运行。
示例 slack webhook
- 'curl args: -X POST -H ''Content-type: application/json'' --data ''{"text":"Hello, World!"}'' https://hooks.slack.com/services/####/###############'
好的。这让我慢慢发疯。 我已经为我的一个项目在 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'
我觉得自己很愚蠢,我知道解决这个问题可能很简单,但我已经深入了解了 "escape quotes while escaping quotes" 这件事,如果有人能给我指出正确的方向,我将不胜感激。
我也链接到这些问题,因为我试图按照它们来解决我的问题:
Escaping colons in YAML
How to escape indicator characters (i.e. : or - ) in YAML
好的 - 我已经设法通过创建简单的 bash 脚本来解决(或破解)这个问题:
#!/bin/bash
curl -H 'Authorization: Token someToken' -X POST http://my.server.com -F filedata=@file.txt
然后我继续调用 .travis.yml 文件中的脚本:
- ./upload_script.sh
感谢@набиячлэвэлиь 在评论中向我推荐了解决方案。
我们非常欢迎任何其他更好的解决方案。
在 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\""
您只需更改语法并直接获取它运行。
示例 slack webhook
- 'curl args: -X POST -H ''Content-type: application/json'' --data ''{"text":"Hello, World!"}'' https://hooks.slack.com/services/####/###############'