所以我在github上继续进行一个开源项目的集成。
对于这个项目,我已经确定要运行集成测试, 作为CI的一部分。
现在因为集成测试使用了一个有限的资源, 我不能一次运行多个。
所以我已经将AppVeyor和Travis都设置为每次只运行一次构建/测试。 但是他们彼此不了解。
处理这种情况的聪明方法是什么?
我目前对于解决问题的想法是获得限制重复的第二个实例,所以我可以同时拥有两个。 但那有点贵; (对于某些费用值)。
答案 0 :(得分:1)
您可以使用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为您提供示例。
谢谢你, 伊利亚。