
По некоторым просьбам, публикую очень короткую выжимку моей предыдущей статьи о настройке Continuous Integration, но «как чеклист и для C#». Заодно добавил несколько альтернатив Travis-у.
Чтение займет не больше 3 минут, кому интересно — прошу под кат.
Установите .NET Core SDK. Создайте новый репозиторий и проект.
dotnet new sln --name CIDemo
dotnet new web --name web
dotnet sln CIDemo.sln add web/web.csproj
Добавьте .travis.yml файл в корневую папку проекта.
language: csharp
dotnet: 2.1.4
sudo: false
env:
global:
- DOTNET_CLI_TELEMETRY_OPTOUT: 1
script:
- dotnet build CIDemo.sln -c Release
.travis.yml — служебный файл Travis, содержит настройки окружения, переменные и команды. Документация тут
Залогиньтесь в Travis и дайте ему доступ к вашему репозиторию. Залейте изменения на сервер.
Удачный билд:

А у меня локально все работает Не удачный билд:

Добавьте тестовый проект
dotnet new xunit --name test
dotnet add test/test.csproj package coverlet.msbuild -v 1.2.0
dotnet sln CIDemo.sln add test/test.csproj
xunit — фреймоврк для тестирования, а coverlet.msbuild — инструмент для создания отчетов покрытия кода
Добавьте какой-то класс и напишите для него какой-нибудь тест.
«`c#
using System;
namespace web
{
public class IdProvider
{
public Guid NewId()
{
return Guid.NewGuid();
}
}
}
```c#
using web;
using Xunit;
namespace test
{
public class IdProviderTest
{
[Fact]
public void NewIdShouldReturnUniqueValues()
{
var idProvider = new IdProvider();
var id1 = idProvider.NewId();
var id2 = idProvider.NewId();
Assert.NotEqual(id1, id2);
}
}
}
Добавьте в script секцию команду для запуска тестов
- dotnet test -c Release --no-build test/test.csproj /p:CollectCoverage=true /p:CoverletOutputFormat=opencover
Минимальный уровень покрытия кода задается с помощью флага /p:Threshold=TRESHOLD_LVL
Добавьте в .travis.yml новую секцию
after_script:
- bash <(curl -s https://codecov.io/bash)
Команда отправляет результаты тестов на codecov. Документация тут.
Залогиньтесь в https://codecov.io и дайте ему доступ к вашему репозиторию.
Результат работы codecov:

Все, CI настроен.
Финальная версия .travis.yml
language: csharp
dotnet: 2.1.4
sudo: false
env:
global:
- DOTNET_CLI_TELEMETRY_OPTOUT: 1
script:
- dotnet build CIDemo.sln -c Release
- dotnet test -c Release --no-build test/test.csproj /p:CollectCoverage=true /p:CoverletOutputFormat=opencover
after_script:
- bash <(curl -s https://codecov.io/bash)
Аналоги Travis
- Codeship (Бесплатно для OpenSource)
- Circleci (Бесплатно 1,500 минут билда — +- 300 билдов если что)
- Buddy (Бесплатно 120 билдов но для OpenSource обещают повышать если написать в техподдержку)
Вместо Codecov для работы с тестами можно использовать https://coveralls.io/. Тоже бесплатен для Open Source проектов.
Полезные ссылки
- Travis documentation
- Codecov documentation
- Coverlet documentation
- Очень расширенная версия этой статьи
Если вы знаете другие альтернативные и бесплатные решения для CI — пишите, добавлю в статью.
Всем спасибо. Надеюсь получилось коротко и по сути.