Continuous integration 阻止Travis CI和AppVeyor同时运行

Continuous integration 阻止Travis CI和AppVeyor同时运行,continuous-integration,integration-testing,travis-ci,appveyor,Continuous Integration,Integration Testing,Travis Ci,Appveyor,因此,我在我的github上进行了一个开源项目的持续集成 对于这个项目,我决定运行集成测试, 作为CI的一部分 现在因为集成测试使用单一的有限资源, 我一次只能跑一个 因此,我将AppVeyor和Travis都设置为一次只运行一个构建/测试。 但他们彼此都不了解 处理这种情况的明智方法是什么 我目前的想法是获得有限资源的第二个实例,这样我就可以同时拥有这两种资源。 但这有点贵;(对于某些费用值)。您可以使用Appveyor REST API()使Travis等待Appveyor构建完成。下面是P

因此,我在我的github上进行了一个开源项目的持续集成

对于这个项目,我决定运行集成测试, 作为CI的一部分

现在因为集成测试使用单一的有限资源, 我一次只能跑一个

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

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

我目前的想法是获得有限资源的第二个实例,这样我就可以同时拥有这两种资源。
但这有点贵;(对于某些费用值)。

您可以使用Appveyor REST API()使Travis等待Appveyor构建完成。下面是PowerShell中的示例(我知道PowerShell不是Travis的原生版本,但这是创建和测试示例的最简单方法)

$token=''
$headers=@{
“授权”=“持票人$token”
“内容类型”=“应用程序/json”
}
while((调用RestMethod-Uri'https://ci.appveyor.com/api/projects//'-Headers$Headers-Method Get).build.status-eq“running”){
写入主机“等待Appveyor生成停止运行”
开始睡眠1
}
所以,如果您在Travis测试执行之前放置类似的内容,它应该可以防止并发访问您有限的资源。 此外,最好再添加一个条件,使其在一段时间后停止等待,即使它仍处于
运行状态
,以防止永远卡住

最后,我相信你们可以用另一种方法——让Appveyor等待Travis完成构建。我只是不熟悉TravisAPI来为您提供示例

谢谢,,
伊利亚

您可以使用某种外部“全局”互斥(锁)。这可以是外部Redis缓存或AWS S3存储项,也可以是Azure网站上免费托管的简单Web API服务。
$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
}