所以我在我的 github 上为一个开源项目进行了持续集成。
对于这个项目,我已经确定我要运行集成测试,作为 CI 的一部分。
现在因为集成测试使用单一的有限资源,我一次不能运行多个。
所以我将 AppVeyor 和 Travis 都设置为一次只运行一个构建/测试。但他们彼此并不了解。
处理这种情况的聪明方法是什么?
我目前的解决方法是获得第二个有限的理由,这样我就可以同时拥有两者。但这有点贵;(对于某些费用价值)。
所以我在我的 github 上为一个开源项目进行了持续集成。
对于这个项目,我已经确定我要运行集成测试,作为 CI 的一部分。
现在因为集成测试使用单一的有限资源,我一次不能运行多个。
所以我将 AppVeyor 和 Travis 都设置为一次只运行一个构建/测试。但他们彼此并不了解。
处理这种情况的聪明方法是什么?
我目前的解决方法是获得第二个有限的理由,这样我就可以同时拥有两者。但这有点贵;(对于某些费用价值)。
您可以使用 Appveyor REST API ( https://www.appveyor.com/docs/api/projects-builds/#get-project-last-build ) 让 Travis 等待 Appveyor 构建完成。这是 PowerShell 中的示例(我知道 PowerShell 不是 Travis 原生的,但这是我创建和测试示例的最简单方法)。
$token = '<your_api_token>'
$headers = @{
"Authorization" = "Bearer $token"
"Content-type" = "application/json"
}
while ((Invoke-RestMethod -Uri 'https://ci.appveyor.com/api/projects/<your_account)namr>/<your_project_slug>' -Headers $headers -Method Get).build.status -eq "running") {
write-host "waiting for Appveyor build to stop running"
Start-sleep 1
}
因此,如果您在 Travis 测试执行之前放置这样的内容,它应该可以防止并发访问您的有限资源。此外,最好再添加一个条件以在一段时间后停止等待,即使它仍处于running
状态以防止事情永远卡住。
最后,我相信您可以采取其他方式——让 Appveyor 等待 Travis 完成构建。我只是不熟悉 Travis API 来为您提供示例。
谢谢你,伊利亚。