1

そのため、オープン ソース プロジェクトの github で継続的インテグレーションを行っています。

このプロジェクトでは、CI の一部として統合テストを実行することにしました。

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

そのため、AppVeyor と Travis の両方を、一度に 1 つのビルド/テストのみを実行するように設定しました。しかし、彼らはお互いのことを知りません。

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

回避策についての私の現在の考えは、制限付きのリソースの 2 番目のインスタンスを取得することです。これにより、両方を一度に取得できます。しかし、それはちょっと高価です。(費用の特定の値について)。

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また、永続的にスタックしないようにするために、ステータスがまだ残っている場合でも、しばらくすると待機を停止する条件をもう 1 つ追加することをお勧めします。

最後に、別の方法もあると思います。Appveyor を Travis がビルドを完了するのを待ちます。例を提供するためにTravis APIに精通していません。

ありがとう、イリヤ。

于 2016-09-09T17:01:35.340 に答える