1

Итак, у меня непрерывная интеграция происходит на моем github для проекта с открытым исходным кодом.Остановить работу Travis-CI и AppVeyor в то же время

Для этого проекта я решил, что хочу выполнить интеграционные тесты, как часть CI.

Теперь, поскольку тесты интеграции используют один ограниченный ресурс, У меня не может быть более одного запуска за раз.

Поэтому я установил как AppVeyor, так и Travis, чтобы каждый из них выполнял только одну сборку/тестирование за раз. Но они не знают друг о друге.

Что такое умный способ справиться с этой ситуацией?

Мои текущие мысли для работы - это получить второй экземпляр ограниченного реазора, поэтому я могу иметь оба сразу. Но это довольно дорого; (для определенных значений расхода).

+0

Вы можете использовать какой-то внешний «глобальный» мьютекс (блокировка). Это может быть внешний кэш Redis или элемент хранения AWS S3 или простая служба веб-API, размещенная бесплатно на веб-сайтах Azure. –

ответ

1

Вы можете использовать API-интерфейс Appveyor REST (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 
} 

Так что если вы ставите что-то подобное перед тем, как Трэвис проверяет выполнение, он должен предотвращать одновременный доступ к вашему ограниченному ресурсу. Также было бы неплохо добавить еще одно условие, чтобы остановить ожидание через некоторое время, даже если оно все еще находится в состоянии running, чтобы предотвратить застревание вещей навсегда.

Наконец-то я считаю, что вы можете сделать наоборот: сделайте Appveyor ждать, пока Тревис закончит сборку. Я просто не знаком с Travis API, чтобы предоставить вам пример.

Thank you, Ilya.

Смежные вопросы