1

所以我在我的 github 上为一个开源项目进行了持续集成。

对于这个项目,我已经确定我要运行集成测试,作为 CI 的一部分。

现在因为集成测试使用单一的有限资源,我一次不能运行多个。

所以我将 AppVeyor 和 Travis 都设置为一次只运行一个构建/测试。但他们彼此并不了解。

处理这种情况的聪明方法是什么?

我目前的解决方法是获得第二个有限的理由,这样我就可以同时拥有两者。但这有点贵;(对于某些费用价值)。

4

1 回答 1

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 来为您提供示例。

谢谢你,伊利亚。

于 2016-09-09T17:01:35.340 回答