阻止Travis-CI和AppVeyor同时运行

时间:2016-09-09 07:20:56

标签: continuous-integration integration-testing travis-ci appveyor

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

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

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

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

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

我目前对于解决问题的想法是获得限制重复的第二个实例,所以我可以同时拥有两个。 但那有点贵; (对于某些费用值)。

1 个答案:

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

谢谢你, 伊利亚。