1

私はオープンソースプロジェクトのために自分のgithubで継続的な統合を行っています。Travis-CIとAppVeyorが同時に実行されないようにする

このプロジェクトでは、インテグレーションテストをCIの一部として として実行することを決定しました。

統合テストでは1つの制限付きリソースが使用されるため、 一度に複数のテストを実行することはできません。

私はAppVeyorとTravisの両方をそれぞれ1回だけビルド/テストを実行するように設定しました。 しかし、彼らはお互いを知りません。

このような状況を処理するためのスマートな方法は何ですか?

私の現在の考え方は、リサイズされたリアスールの2番目のインスタンスを取得することです。したがって、私はすぐに両方を持つことができます。 しかしそれはちょっと高価です。 (費用の一定の価値について)。

+0

外部の「グローバル」ミューテックス(ロック)を使用することができます。 Azure Webサイトで無料でホストされている外部RedisキャッシュまたはAWS S3ストレージアイテムまたはシンプルなWeb APIサービスです。 –

答えて

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の状態であっても、しばらくしてから待つのをやめるためにもう1つの条件を追加することをお勧めします。

最後に、私はあなたが別の方法で周りを転じることができると信じています.PrepveyはTravisが完成を待つようにします。私はTravis APIに慣れておらず、例を提供しています。

ありがとう、 Ilya。

関連する問題